如何将取消令牌添加到任务?

时间:2016-10-13 15:14:42

标签: c# task cancellation-token

我正在介绍Task,并且做到了这一点:

在Main:

 Task<double> t = Task.Run(TW.DoingMegaFlops_Async);

在TW级别的地方:

 public async Task<double> DoingMegaFlops_Async()
 {...await ...; return 0.0;}

我的概念控制台应用程序构建并运行得很好。 问题是如何使用Cancellation Token扩展它。我试过这个:

CancellationTokenSource wtokenSource= new CancellationTokenSource();
Task.Run(TW.DoingMegaFlops_Async(wtokenSource.Token), wtokenSource.Token);

和TW班:

public async void DoingMegaFlops_Async(CancellationToken wtoken)
{...await...; return;}

Main中的构建错误是:

Cannot convert from 'void' to 'System.Action'

我已经被愚弄了(动作),但无济于事。 实际上,我真的不明白我在这里做了什么,所以想从论坛中学习。

正如您从代码片段中看到的那样,我已经通过转到返回类型的void来减少Async方法的接口。不知道这是否真的让事情变得更容易。

1 个答案:

答案 0 :(得分:2)

Task.Run(TW.DoingMegaFlops_Async)是&#34;方法组&#34; Task.Run(() => TW.DoingMegaFlops_Async())的简写 - 允许它,因为您正在调用没有参数的方法。

但是,在使用参数调用方法时,必须包含它:

Task.Run(() => TW.DoingMegaFlops_Async(wtokenSource.Token), wtokenSource.Token);