C# 如何向任务添加取消令牌?

C# 如何向任务添加取消令牌?,c#,task,cancellation-token,C#,Task,Cancellation Token,我被介绍到这项任务,并取得了以下进展: 大体上: Task<double> t = Task.Run(TW.DoingMegaFlops_Async); 在TW类中: public async void DoingMegaFlops_Async(CancellationToken wtoken) {...await...; return;} Main中的生成错误是: Cannot convert from 'void' to 'System.Action' 我已经玩弄了铸造(

我被介绍到这项任务,并取得了以下进展:

大体上:

 Task<double> t = Task.Run(TW.DoingMegaFlops_Async);
在TW类中:

public async void DoingMegaFlops_Async(CancellationToken wtoken)
{...await...; return;}
Main中的生成错误是:

Cannot convert from 'void' to 'System.Action'
我已经玩弄了铸造(行动),但无济于事。 其实我不太明白我在这里做什么,所以想从论坛上学习

正如您从代码片段中看到的,我已经通过使用void的返回类型减少了异步方法的接口。不知道这是否真的让事情变得更简单。

Task.Run(TW.DoingMegaFlops\u Async)
Task.Run(()=>TW.DoingMegaFlops\u Async())的“方法组”缩写。
-这是允许的,因为您调用的方法没有参数

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

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

事实上,我宁愿返回一些有用的数据。这就是为什么我需要取消令牌,这样当应用程序停止时,我可以以干净的方式停止任务,并显示一些任务结果数据。太好了,这确实可以。这甚至允许添加返回值。听说我用了速记法,我很惊讶。避免lambda符号和更正“my”符号不是更容易吗?“()=>”符号在我看来,我是从Fortran开始的,有点像高等数学。
Cannot convert from 'void' to 'System.Action'
Task.Run(() => TW.DoingMegaFlops_Async(wtokenSource.Token), wtokenSource.Token);