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:481740
用户头像

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

关注

评论

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

ARTS-Week 02

chasel

助力经济复苏 联想来酷"618"聚"惠"来袭

Geek_116789

如何科学的做体检?

石云升

体检 癌症筛查

架构师训练营第三周命题作业

hifly

设计模式 单例模式 极客大学架构师训练营 组合模式 手写代码

架构师训练营 No.3 周总结

连增申

Java 字符串连接运算符干了什么?

封不羁

Java

软件设计原则 - 第三周总结

孙志平

组合设计模式-打印窗口组件的树状结构

leis

单例模式的实现方式

互金从业者X

代码重构能力体会总结

周冬辉

架构师训练营第三周总结

Hanson

架构师训练营第三周作业

James-Pang

极客大学架构师训练营

如果你想要说服别人,要诉诸利益,而非诉诸理性

Neco.W

理性 说服 利益 谈判

第三章作业

武鹏

什么是技术债,为什么要还技术债?

Phoenix

项目管理 架构 技术 管理 工作方式

架构师训练营第三周

Hanson

架构师训练营第三周作业

烟雨濛濛

架构师训练营第 0 期 - 第 3 周 - 学习总结

极客大学架构师训练营

软件设计原则 - 第三周作业

孙志平

Git | Git 操作整理-基础篇

多选参数

git GitHub 版本控制 版本管理工具

homework 3

东哥

架构师训练营第三周总结

James-Pang

极客大学架构师训练营

软件设计之术-设计模式学习应用心得

旭东(Frank)

架构 设计模式 技术交流 架构师 极客大学架构师训练营

分布式系统消息异常该何去何从

架构师修行之路

分布式 分布式锁

架构师训练营第 0 期 - 第 3 周 - 命题作业

极客大学架构师训练营

架构师训练营第 03 周——总结

李伟

极客大学架构师训练营

面试难题:为什么HashMap加载因子默认值0.75?

Java小咖秀

Java 面试 hashmap

如何有效实现“科技抗疫”?这家科技巨头正在作出典范

最新动态

菜鸟的系统架构师如何应对交易系统激增的系统流量

阿里巴巴中间件

可读代码编写炸鸡一

多选参数

代码 代码组织 代码规范

架构训练营 0 期总结 -- 第三周

互金从业者X

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