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

how to add a Cancellation Token to a Task?

我开始接触 Task,并走到了这一步:

主线:

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

在 class 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);

在台湾class:

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

Main 中的构建错误是:

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

我已经胡乱投射到(Action),但没有用。 其实我也不是很明白我在这里做什么,所以想从论坛上学习。

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

Task.Run(TW.DoingMegaFlops_Async) 对于 Task.Run(() => TW.DoingMegaFlops_Async()) 是 "Method Group" shorthand - 这是允许的,因为您正在调用不带参数的方法。

但是,当调用带有参数的方法时,您必须包含它:

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