Example #1
0
 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
     });
 }
Example #2
0
            public Logic(TaskSource <T> stage) : base(stage.Shape)
            {
                _stage = stage;

                SetHandler(stage.Outlet, this);
            }