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

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

关注

评论

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

2021百度Java岗面试真题收录解析,Java开发者必看避坑指南

Java 程序员 后端

4面技术5面HR附加笔试面,初级Java面试题大全

Java 程序员 后端

不要让孩子在12岁之前接触手机游戏

石云升

育儿 10月月更

区块链上升为国家战略两周年后 看浪潮下企业如何创新数字化应用

CECBC

027云原生之服务网格应用

穿过生命散发芬芳

云原生 10月月更

阿里技术官终于把这份万字面试手册整理出来了,在Github上获赞89.7K

Java 编程 程序员 架构 面试

4面字节跳动拿到Offer,尚学堂java视频下载,初级Java面试题大全

Java 程序员 后端

3分钟就能完成的Redis主从复制搭建,10天拿到阿里Java岗offer

Java 程序员 后端

4面阿里拿到P7Offer,SpringSecurity如何实现加密和解码

Java 程序员 后端

2021网易Java高级面试题总结,初级Java程序员面试题

Java 程序员 后端

2021阿里Java高级面试题总结,Dubbo高频面试题+解析

Java 程序员 后端

30岁以后搞Java已经没有前途,java自学编程入门教程,大V推荐

Java 程序员 后端

35岁技术人如何转型做管理,mybatis使用教程,Java全套视频

Java 程序员 后端

38岁的中年失业者怎么活下去,Java中级工程师面试题及答案

Java 程序员 后端

21年Java面经分享,Java面试知识点总结宝典助你通关

Java 程序员 后端

2面技术+HR面+offer,从头到尾,都是精华

Java 程序员 后端

先行一步,7大技术创新和突破,阿里云把 Serverless 领域的这些难题都给解了

阿里巴巴云原生

阿里云 Serverless 云原生 云栖大会

35岁技术人如何转型做管理?牛客网中级项目笔记,Java高级工程师必备知识

Java 程序员 后端

4面技术5面HR附加笔试面,面试的时候突然遇到答不上的问题怎么办

Java 程序员 后端

30岁以后搞Java已经没有前途,Java经典排序算法

Java 程序员 后端

35岁程序员的人生感悟,mongodb入门教程,阿里Java高级工程师面试题

Java 程序员 后端

3年内被辞退5次,35岁程序员该何去何从,Java工程师必备知识

Java 程序员 后端

4个改变你编程技能的小技巧,附答案解析

Java 程序员 后端

4个改变你编程技能的小技巧,非科班生金九银十求职经历

Java 程序员 后端

2021金九银十面试季,java零基础入门视频教程,成功入职腾讯

Java 程序员 后端

云栖掠影|回首开源十年,RocketMQ 焕发新生

阿里巴巴云原生

阿里云 RocketMQ 云原生

35岁老年程序员的绝地翻身之路,Java面试重点问题

Java 程序员 后端

46道面试题带你了解高级Java面试,linux教程视频合集

Java 程序员 后端

推荐两款工具给爱做实验的人

Java 开源 编程 架构

25K大牛甩出的超详细面试总结,给班出身的程序员一些建议

Java 程序员 后端

2面技术+HR面+offer,成功入职头条月薪35K

Java 程序员 后端

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