public override void Process(IMonadSink monad) { parent = monad; //TODO: not thread safe, not even reenterable foreach (var c in childs) { c.Process(this); } }
public override void Dispose() { var parent = this.parent; this.parent = null; if (parent == null) { return; } try { cts.Cancel(); } catch { //swallow error; } cts = null; }
public void Continuation(Task task) { var parent = this.parent; this.parent = null; if(parent == null) { return; } if (task.Status != TaskStatus.RanToCompletion) { parent.Fail(task.Exception); parent.Dispose(); return; } parent.Succeed(); parent.Dispose(); }
public override void Process(IMonadSink monad) { this.parent = monad; fact(cts.Token).ContinueWith(Continuation); }
public override void Process(IMonadSink monad) { this.parent = monad; task.ContinueWith(Continuation); }