8 public partial class Fiber {
10 public Fiber
WaitFor(Emitter emitter,
string name = null) =>
11 AddAction(_ => EmitterWorker.Instance.Load(
this, emitter), name ??
"WaitFor(Emitter)");
14 public Fiber
WaitFor(Func<Fiber, Emitter> getEmitter,
string name = null) =>
15 AddAction(_ => EmitterWorker.Instance.Load(
this, getEmitter(
this)), name ??
"WaitFor(Emitter)");
19 AddAction(_ => emitter.
Fire());
24 public Fiber Fire(Func<Fiber, Emitter> getEmitter) {
25 AddAction(_ => getEmitter(
this).
Fire());
31 if (cancelOnFired ==
default) cancelOnFired = ExitOnFire;
32 emitter.
Listen(cancelOnFired);
33 cancelOnEmitter = emitter;
36 private Emitter cancelOnEmitter;
38 private void ExitOnFire(
Emitter emitter) {
40 emitter.
Remove(cancelOnFired);
42 private void CancelOnAborted() {
43 cancelOnEmitter?.
Remove(cancelOnFired);
44 cancelOnEmitter =
default;
47 private class EmitterWorker : Worker<Emitter> {
48 static EmitterWorker() => NeedsUpdates =
false;
50 public EmitterWorker() => onNext = OnNext;
54 protected override void Recycle() => Cache<EmitterWorker>.
Dispose(
this);
56 protected override bool Prepare() {
65 private readonly Emitter.Action onNext;
66 private void OnNext(Emitter emitter) {
67 emitter.StopListening();
Emitter Listen(Action action)
Ask an emitter to tell me too
lightweight cooperative multi-tasking
Fiber CancelOn(Emitter emitter)
Cancel/Abort/Exit current fiber if an emitter fires
Fiber WaitFor(IClosure closure)
Helper that is the same as fiber.WaitFor(closure.OnComplete)
delegate void Action(Emitter emitter)
Returns false to remove listener from future firings
Fiber Exit()
Abort fiber processing immediately, cleaning up as we go
Fiber Fire(Emitter emitter)
Fire an emitter at this point in the Fiber sequence
void Dispose()
Cleans up Fiber before it goes into the recycling
Fiber Fire(Func< Fiber, Emitter > getEmitter)
Fire an emitter at this point in the Fiber sequence
void Fire()
The owner shoots and all the listeners hear
Cached C# Action instances using the observer pattern
static Fiber Instance
Precompile an instance of a fiber command
Emitter Remove(Action action)
Remove a listener if it is in the list