C# 等待方法中的取消令牌

C# 等待方法中的取消令牌,c#,async-await,async-ctp,cancellation-token,C#,Async Await,Async Ctp,Cancellation Token,在任务的构造函数中放置令牌有很多原因,如下所述: 通过使用关键字async/await,这是如何工作的? 例如,我的代码如下: public async Task MethodAsync(CancellationToken token) { await Method01Async(); await Method02Async(); } 虽然这是一个异步过程。我很快就使用了“Task.StartNext”或“Task.Run”或“newtask”。要指定我的取消令牌,我该怎么做?您不应

在任务的构造函数中放置令牌有很多原因,如下所述:

通过使用关键字async/await,这是如何工作的? 例如,我的代码如下:

public async Task MethodAsync(CancellationToken token)
{
  await Method01Async();
  await Method02Async();
}

虽然这是一个异步过程。我很快就使用了“Task.StartNext”或“Task.Run”或“newtask”。要指定我的取消令牌,我该怎么做?

您不应该在
async
方法中使用
Task
构造函数。通常,您只需要将
CancellationToken
传递到on,如下所示:

public async Task MethodAsync(CancellationToken token)
{
  await Method01Async(token);
  await Method02Async(token);
}

重构这些方法以获取
CancellationToken
。如果我没有(明确地)创建任务,我如何重构?如果您无法更改
Method01Async
以接受令牌,您最好在
01
完成后亲自检查令牌,提前退出而不是调用
02
是一篇关于这个主题的好文章。您想实际停止异步任务,还是在令牌被取消并停止等待时继续?你是否意识到这样做的潜在陷阱?如果我不能的话。然后总是要检查异步方法中的令牌?@J.Lennon:实际上,您确实得到了好处。如果您立即检查它,那么其余的代码将无法运行。取消时,从
MethodAsync
返回的
任务将在取消状态下完成。如果将其传递给
任务
构造函数,您将获得所有好处。