C# 访问取消任务的CancellationToken
我正在执行标准操作,将C# 访问取消任务的CancellationToken,c#,.net,asynchronous,task-parallel-library,C#,.net,Asynchronous,Task Parallel Library,我正在执行标准操作,将任务的结果复制到任务完成源: TaskCompletionSource<int> tcs = ...; Task<int> task = ...; task.ContinueWith(t => { if (t.IsCanceled) tcs.TrySetCanceled(new TaskCanceledException(task).CancellationToken); else if (t.IsFault
任务的结果
复制到任务完成源
:
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);
});
taskCompletionSourceTCS=。。。;
任务=。。。;
task.ContinueWith(t=>
{
如果(t.IsCanceled)
tcs.TrySetCanceled(新任务CanceledException(任务).CancellationToken);
否则,如果(t.IsFaulted)
TrySetException(task.Exception.innerException);
其他的
tcs.TrySetResult(task.Result);
});
您可能会注意到一段有趣的代码,用于设置触发取消的令牌。这是我想让它更干净的部分
作为一个实现细节,存在一个
任务。CancellationToken
成员,该成员最好有权访问,但它是内部的。构造一个新的TaskCanceledException
是我能找到的访问它的最便宜的方法。有更好的方法吗?首先为什么要这样做?为什么不直接调用trysetconceled()而不进行任何讨论?TaskCompletionSource本身返回相同类型的任务,该任务同样无法返回其取消令牌,因此通常不会在调用方端访问此取消令牌。还是我想念史密斯。?