NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

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

关注

评论

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

大规模预训练模型:探讨与展望

澜舟孟子开源社区

CSS修改单选框样式(element)

肥晨

11月月更 单选框样式修改 element单选框样式

袋鼠云数栈UI5.0体验升级背后的故事:可用性原则与交互升级

袋鼠云数栈

这家公司的码农有多牛,用C++重写Kafka,还能与其API兼容

雨果

Kafk

重塑感知,荣耀金洋!金洋奖两项用户体验奖项公布

易观分析

App 手机银行

[力扣] 剑指 Offer 第三天 - 替换空格

陈明勇

Go 数据结构与算法 力扣 11月月更

HIFIVE音加加:多场景音乐版权解决方案,让「用音乐」更便捷

HIFIVE音加加

版权保护 视频后期 数字版权保护

JAVA concurrency -- ReentrantLock 源码详解

骑牛上青山

Java 源码

完整会议议程:NGINX Sprint China 2022 年度线上大会

NGINX开源社区

nginx

脑机直播 x 赛博驱魔!瑞云专访揭秘胶囊计划国风科幻神作《终极体验》制作幕后...

Renderbus瑞云渲染农场

3D动画 动画制作 瑞云专访

用户体验成为继MAU后,手机银行竞争分化的下一分水岭,易观千帆重磅发布手机银行APP用户体验GX评测

易观分析

App 手机银行

一场算力集结令,国产芯片如何开启冲刺跑?

脑极体

什么是“数字孪生”?有什么价值?

雨果

数字孪生

数据中台选型必读(四):要想中台建的好,数据模型得做好

雨果

数据中台

《深入理解JavaScript特性》学习总结2-ES6基础知识点总结

肥晨

11月月更 ES6基础知识点总结 解构赋值

数字化开采|AIRIOT智慧矿山自动化生产解决方案

AIRIOT

低代码 物联网 智慧矿山

图文实录|UIE:基于统一结构生成的通用信息抽取

澜舟孟子开源社区

国企数字化转型全是坑?看这几个成功案例,减少90%损失

雨果

数字化转型

20个值得收藏的实用JavaScript技巧

千锋IT教育

OpenYurt v1.1.0: 新增 DaemonSet 的 OTA 和 Auto 升级策略

阿里巴巴云原生

阿里云 开源 云原生 openyurt

爬虫基本原理介绍、实现以及问题解决

石臻臻的杂货铺

爬虫

JAVA concurrency -- ArrayBlockingQueue源码详解

骑牛上青山

Java 源码

2022年互联网主要技术方向招聘需求变化:人工智能岗位需求增加87.7%;SQL在就业语言需求中位列第一

雨果

sql

基于 MQ 的分布式 Serverless 多租任务处理系统架构演进

Apache RocketMQ

消息队列 异步调度 #Serverless 任务

助力车路云一体化,EMQ在车路协同领域的应用实践

EMQ映云科技

物联网 IoT emq 11月月更 车路协同

《深入理解JavaScript特性》学习总结1-ES6基础知识点总结

肥晨

箭头函数 11月月更 ES6基础知识点总结

万物皆可集成系列:低代码对接Web Service接口

葡萄城技术团队

2022开源之夏|EMQ三大开源项目开发圆满收官

EMQ映云科技

开源 物联网 IoT mqtt 11月月更

商业银行普惠金融可持续发展综合能力呈现梯队化,专项领域各有所长

易观分析

普惠金融

数据中台选型必读(五):中台建设本质就是构建企业的公共数据层

雨果

数据中台

JAVA concurrency -- CyclicBarrier 与 CountDownLatch 源码详解

骑牛上青山

Java 源码

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