

.NET 单个异步任务如何同时监听多个取消请求(CancellationToken)
source link: https://blog.walterlv.com/post/a-single-task-listen-to-multiple-cancellation-requests.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

.NET 单个异步任务如何同时监听多个取消请求(CancellationToken)
2021-06-11 01:13
异步编程中,并不是所有时候 await
等的都是新的异步任务;有时候同一个异步任务可能被多次等待,并且每个等待都可以有自己的取消请求,即 CancellationToken
。那么如何在一个异步任务中同时响应多个取消请求呢?
可被多次 await
的单个任务
我们先来列举一个最简单的例子,用来作为多次取消请求的示例。
class WalterlvDemoClass
{
private readonly CancellationToken _currentCancellationToken = default;
public async Task DoSomethingAsync(CancellationToken cancellationToken)
{
// 省略真正的异步代码。
}
}
现在,DoSomethingAsync
可能被调用多次,但执行的都是同一件事情。当任务完成时所有 await
全部等待完成,当任务取消时所有 await
全部取消。
合并 CancellationToken
合并 CancellationToken
的方法是:
var token = CancellationTokenSource.CreateLinkedTokenSource(token1, token2)
合并完成后的 CancellationToken
在两者任一个取消时都会被取消。
于是我们前面的 DoSomethingAsync
加一行即可:
class WalterlvDemoClass
{
private readonly CancellationToken _currentCancellationToken = default;
public async Task DoSomethingAsync(CancellationToken cancellationToken)
{
++ _currentCancellationToken = CancellationTokenSource.CreateLinkedTokenSource(_currentCancellationToken, cancellationToken);
++
// 省略真正的异步代码,需要判断取消请求时,判断 _currentCancellationToken。
}
}
参考资料
本文会经常更新,请阅读原文: https://blog.walterlv.com/post/a-single-task-listen-to-multiple-cancellation-requests.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
如果你想持续阅读我的最新博客,请点击 RSS 订阅,或者前往 CSDN 关注我的主页。
本作品采用
知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
进行许可。欢迎转载、使用、重新发布,但务必保留文章署名
吕毅
(包含链接:
https://blog.walterlv.com
),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请
与我联系 ([email protected])
。
Recommend
-
15
在 .NET 开发中,CancellationToken(取消令牌)是一项比较重要的功能,掌握并合理的使用 CancellationToken 可以提升服务的性能。特别在异步编程中,我常常会以创建 Task 的方式利用多线程执行一些耗时或非核心业务逻辑,表面上看既提高了整个流程的执行速度,...
-
9
ascotbe利用树莓派来监听任务目标(上)发表于2019-12-21|更新于2020-03-31阅读量:18严正声明:本文仅用于技术探讨,严禁用于其他非法途径。...
-
4
ascotbe利用树莓派来监听任务目标(下)发表于2020-03-31|更新于2020-04-08阅读量:29距离上次的上篇已经过去了小半年时间了,真的不是我咕咕了,是因为自己挖的坑...
-
8
【ASP.NET Core】绑定到 CancellationToken 对象 负责管理 HTTP 请求上下文的 HttpConte...
-
1
异步监听多个错误 reaperhero · 3天之前 · 548 次点击 · 预计阅...
-
11
-
5
通过 CancellationToken 提高 Web 性能 2022-12-10 2022-12-11 4在 Web 开发中,经常会遇到这样的场景:用户发起一个请求,Web 服务器执行一些计算密集型的操作,等待结果返回给...
-
3
通过 CancellationToken 提高 Web 性能 在 Web 开发...
-
6
欧雷说:「数据结构与算法是解决单个任务的效率问题,而软件设计模式则是解决多个模块的交互问题;都是解决问题的工具...」 欧雷 发表于 2023-08-27 17:36...
-
7
A .NET Programmer's Guide to CancellationToken
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK