5
votes

There are many reasons to put a token in the constructor of a task, mentioned here: Cancellation token in Task constructor: why?

With the use of keywords, async / await, how is that working? for example my code below:

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

Although it is an asynchronous process. In no time I used "Task.StartNext" or "Task.Run" or "new Task". To be able to specify my cancellation token, how can I do?

1
refactor those methods to take a CancellationToken. - CodesInChaos
how can I refactor if I do not create a task (explicitly)? - J. Lennon
If you can't change Method01Async to accept a token, the best you can do really is check the token yourself after 01 has completed, and exit early rather than calling 02 - Damien_The_Unbeliever
Here is a great article on the subject. Do you want to actually stop the async task, or just continue on if the token is canceled and stop waiting? Are you aware of the potential pitfalls of doing so? - Servy

1 Answers

4
votes

You aren't supposed to use the Task constructor in async methods. Usually, you just want to pass the CancellationToken on, like this:

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