访问取消任务的CancellationToken

时间:2018-05-08 03:56:28

标签: c# .net asynchronous task-parallel-library

我正在执行将Task的结果复制到TaskCompletionSource的标准操作:

TaskCompletionSource<int> tcs = ...;

Task<int> task = ...;

task.ContinueWith(t =>
{
    if (t.IsCanceled)
        tcs.TrySetCanceled(new TaskCanceledException(task).CancellationToken);
    else if (t.IsFaulted)
        tcs.TrySetException(task.Exception.InnerExceptions);
    else
        tcs.TrySetResult(task.Result);
});

您可能会注意到有一些有趣的代码来设置触发取消的令牌。这是我试图做一点清洁的部分。

作为一个实现细节,有一个Task.CancellationToken成员可以访问,但它是内部的。构建一个新的TaskCanceledException是我能找到的最便宜的方式来访问它。还有更好的方法吗?

0 个答案:

没有答案