Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CreateChooseBranch< T >()

static Task< int > System.Threading.Tasks.Dataflow.DataflowBlock.CreateChooseBranch< T > ( StrongBox< Task > boxedCompleted,
CancellationTokenSource cts,
TaskScheduler scheduler,
int branchId,
ISourceBlock< T > source,
Action< T > action )
inlinestaticprivate

Definition at line 1664 of file DataflowBlock.cs.

1665 {
1666 if (cts.IsCancellationRequested)
1667 {
1668 return Common.CreateTaskFromCancellation<int>(cts.Token);
1669 }
1671 IDisposable unlink;
1672 try
1673 {
1674 unlink = source.LinkTo(chooseTarget, DataflowLinkOptions.UnlinkAfterOneAndPropagateCompletion);
1675 }
1676 catch (Exception exception)
1677 {
1678 cts.Cancel();
1679 return Common.CreateTaskFromException<int>(exception);
1680 }
1681 return chooseTarget.Task.ContinueWith(delegate(Task<T> completed)
1682 {
1683 try
1684 {
1685 if (completed.Status == TaskStatus.RanToCompletion)
1686 {
1687 cts.Cancel();
1688 action(completed.Result);
1689 return branchId;
1690 }
1691 return -1;
1692 }
1693 finally
1694 {
1695 unlink.Dispose();
1696 }
1697 }, CancellationToken.None, Common.GetContinuationOptions(), scheduler);
1698 }
static TaskContinuationOptions GetContinuationOptions(TaskContinuationOptions toInclude=TaskContinuationOptions.None)
Definition Common.cs:262

References System.action, System.exception, System.Threading.Tasks.Dataflow.Internal.Common.GetContinuationOptions(), System.Threading.CancellationToken.None, System.scheduler, System.source, and System.Threading.Tasks.Dataflow.DataflowLinkOptions.UnlinkAfterOneAndPropagateCompletion.