public Logic(TaskSource <T> source) : base(source.Shape) { SetHandler(source.Outlet, onPull: () => { var callback = GetAsyncCallback <Task <T> >(t => { if (!t.IsCanceled && !t.IsFaulted) { Emit(source.Outlet, t.Result, CompleteStage); } else { FailStage(t.IsFaulted ? Flatten(t.Exception) : new TaskCanceledException("Task was cancelled.")); } }); source._task.ContinueWith(t => callback(t), TaskContinuationOptions.ExecuteSynchronously); SetHandler(source.Outlet, EagerTerminateOutput); // After first pull we won't produce anything more }); }
public Logic(TaskSource <T> stage) : base(stage.Shape) { _stage = stage; SetHandler(stage.Outlet, this); }