Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问取消任务的CancellationToken_C#_.net_Asynchronous_Task Parallel Library - Fatal编程技术网

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本身返回相同类型的任务,该任务同样无法返回其取消令牌,因此通常不会在调用方端访问此取消令牌。还是我想念史密斯。?