CancellationTokenSource 和 TaskCompletionSource 是 .NET 中用于异步编程的两个核心类,它们分别解决 “如何取消任务” 和 “如何手动控制 Task 的完成” 的问题。
一、CancellationTokenSource 提供取消信号,用于通知异步操作“你该停了”。
- 作用:生成一个取消令牌(CancellationToken),并控制是否发出取消请求。
- 使用场景:你想在异步操作中支持“中途取消”。
- 关键成员:
1. Token:给异步方法传入这个 token,让它能响应取消。
2. Cancel():触发取消信号。
3. CancelAfter(TimeSpan):延迟取消。
Code: [全选] [Expand/Collapse]
-
Console.WriteLine("1.生成一个取消令牌(CancellationToken),并在 5 秒钟后发出取消请求。");
-
var cts = new CancellationTokenSource();
-
cts.CancelAfter(TimeSpan.FromSeconds(5));
-
-
Console.WriteLine("2.调用异步任务 DoWorkAsync …");
-
await DoWorkAsync(cts.Token);
-
-
Console.WriteLine("3.程序结束");
-
async Task DoWorkAsync(CancellationToken token)
-
{
-
int i = 0;
-
while (!token.IsCancellationRequested)
-
{
-
await Task.Delay(1000);
-
Console.WriteLine($" 第{++i}秒. Working…");
-
}
-
Console.WriteLine(" 任务被取消!");
-
}
运行结果:
Code: [全选] [Expand/Collapse]
-
1.生成一个取消令牌(CancellationToken),并在 5 秒钟后发出取消请求。
-
2.调用异步任务 DoWorkAsync …
-
第1秒. Working…
-
第2秒. Working…
-
第3秒. Working…
-
第4秒. Working…
-
第5秒. Working…
-
任务被取消!
-
3.程序结束
原文作者: BG6RSH | 查看原帖