2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

介绍任务并行库中新增的取消框架

  • 2009-11-15
  • 本文字数:866 字

    阅读完需:约 3 分钟

.NET 4 的任务并行类库在 beta 2 中有了新面貌。这个类库与传统的 ThreadPool 相比提供了更好的性能和功能。其中一个改进便是解决了 ThreadPool 在任务取消方面的不足。众所周知,目前的线程池并不提供一种有效地方式来取消那些已经创建的任务。

任务并行库从一开始便提供了对任务取消的支持,不过 beta 2 版本中从实现和 API 上都引入了重要的改变。新的取消模型引入了 CancellationTokenSource,其中包含一个 CancellationToken 对象。这样一来 Task 对象便不需要 Cancel、AcknowledgeCancellation、IsCancellationRequested、Current、Parent 以及 TaskCreationOptions.RespectParentCancellation 枚举器等成员。与此相对,许多方法已经提供了一个可选的,包含 CancellationToken 作为参数的重载版本。

希望取消一个或多个任务的对象需要持有一个 CancellationTokenSource 对象,而一个响应取消操作的任务也需要持有 CancellationToken,并且有规律地检查它的 IsCancellationRequested 属性。多个任务可以共用同一个 CancellationToken。在得到任务取消的请求之后,每个任务需要抛出 OperationCanceledException。

在过去的 beta 版本中,任务之间自然维护着父 / 子关系。这个关系和它们产生的行为是自然建立的,除非开发人员显式地进行剥离。在 beta 2 中使用相反的做法。父 / 子关系在默认情况下并不会出现,除非开发人员显式地进行确认。

如果你确认了父 / 子任务,那么你同样获得原有的一些特性,如异常传播,父任务等待子任务完成。如果你不这么做,任务就和传统的 ThreadPool 工作项差不多了。

就像大部分没有处理的异常那样,没有得到“关注”的 TPL 异常会让应用程序崩溃。如果要对异常进行“关注”,你必须在调用任务的 Wait 方法时捕获异常,或者在任务被垃圾回收之前检查其 Exception 属性。Beta 2 增加了一个新的选项,即 UnobservedTaskException 事件,这给了开发人员最后得机会来避免异常造成实际的破坏。

你可以在.NET 并行计算博客中了解更多Beta 2 中的改进。

查看英文原文: Introducing the Task Parallel Library’s new Cancellation Framework

2009-11-15 10:481720
用户头像

发布了 157 篇内容, 共 62.3 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

2020一个Android大牛的面试经历分享(金九银十面试30多家公司)

android 程序员 移动开发

2020个人开发者做一款Android-App需要知道的事情,年薪百万在此一举

android 程序员 移动开发

2020初中级Android开发社招面试总结+解答分享!,androidsdk开发书籍

android 程序员 移动开发

模块二

小麦🌾

架构实战营

架构训练营 - 模块二作业

VegetableBird

架构训练营 架构实战营

[ CloudWeGo 微服务实践 - 04 ] 尝试操作数据(2)

baiyutang

golang 11月日更

2020年Android开发年终总结之如何挤进一线大厂?(1),如何成为杰出的程序员

android 程序员 移动开发

2020Android面试心得,已拿到offer,阿里P8架构师Android大厂面试题总结

android 程序员 移动开发

2020上半年已过,疫情下互联网迎来红利期,Android技术下半场在哪?

android 程序员 移动开发

2020年Android高级面试题总结(附答案解析),面试突击版

android 程序员 移动开发

2020关于面试字节跳动,我总结一些面试点,希望对最近需要面试的你们一些帮助

android 程序员 移动开发

初识JavaScript第一篇及解释器和编译器

你好bk

JavaScript html5 大前端 html/css

2020全网HTTP最佳解析,没有之一!(github标星5-1K,字节跳动Android岗面试题

android 程序员 移动开发

2020字节跳动面试看这篇就够了100道高频面试题解析!(数据结构与算法

android 程序员 移动开发

2020年中总结之----怎么挤进一线大厂?非软文!,2021Android面试心得

android 程序员 移动开发

2020Android面试心得(二),【面试总结】

android 程序员 移动开发

2020年中总结之----怎么挤进一线大厂?非软文!(1),Android面试题整理

android 程序员 移动开发

2020年末知识大总结:Java程序员转Android开发必读经验一份

android 程序员 移动开发

2020Android面经,历时一个半月,斩获3个大厂offer,kotlin语法大全

android 程序员 移动开发

2020了,Android开发是否真的还有出路!25岁的我还有机会吗

android 程序员 移动开发

2020届毕业生9月份还没找到Android开发工作,是什么体验?(1)

android 程序员 移动开发

2020年8月30写篇文章,记录我的字节跳动客户端面试之旅!

android 程序员 移动开发

2020年度整理国内一线互联网公司内部Android面试题库,androidstudio开发项目

android 程序员 移动开发

2020年Android开发年终总结之如何挤进一线大厂?,android界面开发实验报告

android 程序员 移动开发

2020互联网寒冬之下,作为一个Android老码农,是如何进入腾讯的?

android 程序员 移动开发

架构实战训练营-模块二作业

御道而行

架构实战营

架构实战营模块2作业

小饭🍎

架构师 作业 模块二

“元宇宙”概念股中青宝、天下秀涨停

区块链日报

第二周学习记录总结

乐知

架构训练营

2020届毕业生9月份还没找到Android开发工作,是什么体验?

android 程序员 移动开发

模块二作业及总结

Thomas

架构训练营

介绍任务并行库中新增的取消框架_.NET_Jonathan Allen_InfoQ精选文章