Cancellation Token in await method
Asked Answered
C

1

5

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?

Coach answered 11/12, 2012 at 15:14 Comment(4)
refactor those methods to take a CancellationToken.Sedation
how can I refactor if I do not create a task (explicitly)?Coach
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 02Azilian
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?Traduce
C
4

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);
}
Catena answered 11/12, 2012 at 15:31 Comment(2)
If I can not. Then always have to check the token inside the asynchronous method?Coach
@J.Lennon: You do get the benefits, actually. If you check it right away, then the rest of your code won't run. When it's cancelled, the Task returned from MethodAsync will complete in a cancelled state. You get all the benefits that you would get if you passed it to a Task constructor.Catena

© 2022 - 2024 — McMap. All rights reserved.