写点什么

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

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

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

关注

评论

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

分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享

北京好雨科技有限公司

开源 Kubernetes 云原生 SpringCloud Jaeger

【黄啊码】MySQL入门—1、SQL 的执行流程

黄啊码

MySQL 8月月更

SchedulX V1.5.0发布,提供快速压测、对象存储等全新功能!

星汉未来

云原生 k8s IT运维 降本增效 星汉未来

2022上半年各银行理财子公司深耕差异化发展,净值型产品数量增加

易观分析

银行 子公司 差异化发展 净值型产品

企业应当实施的5个云安全管理策略

SEAL安全

云计算 容器 DevOps 云原生 DevSecOps

聚焦数据来源、数据质量和模型性能构建小微企业信用画像

易观分析

数据技术 小微企业

【有话耀说】开发小达人们,荣耀开发者服务平台正式入驻InfoQ社区啦~

荣耀开发者服务平台

数据中台建设(九):数据中台资产运营机制

Lansonli

数据中台 8月月更

秒云成功入选《2022爱分析 · 银行数字化厂商全景报告》,智能运维能力获认可

MIAOYUN

人工智能 银行数字化转型 智能运维 智能运维AIOps

活动报名:如何高效应对当下的实时场景需求?

tapdata

Tapdata 实时数据

TPC藏宝计划IDO自由协议复利模式开发功能分析

开发微hkkf5566

Tapdata 开源项目基础教程:功能特性及实操演示

tapdata

Tapdata 开源社区

炫酷又高效的数据可视化大屏,做起来真的没那么难!丨极客星球

MobTech袤博科技

产品设计 数据可视化

隐私计算与数据流通:关系、作用及功能

Jessica@数牍

隐私保护 隐私计算 数据流通 数据交易 数牍科技

Java使用IReport导出复杂报表

源字节1号

微信小程序 软件开发 前端开发 后端开发

【黄啊码】MySQL入门—2、使用数据定义语言(DDL)操作数据库

黄啊码

MySQL 8月月更

如何过一个充满科技感的七夕?华为告诉你

最新动态

AI 助力双碳目标:让每一度电都是我们优化的

阿里技术

人工智能

制作温馨浪漫爱心表白动画特效HTML5+jQuery【附源码】

JavaPub

临床研究方法学,到现场,到数据真实发生的地方 | 对话数智 x 张维拓

ModelWhale

数据分析 人才培养 数据科学 8月月更 临床医学

全面认识MOS管,一篇文章就够了

矜辰所致

电路设计 8月月更 电子设计基础 MOS管

运维:Centos8安装supervisor守护Nginx进程笔记

天使不哭

#开源 8月月更

技术分享| 小程序实现音视频通话

anyRTC开发者

小程序 uni-app 音视频 语音通话 视频通话

【LeetCode】分组的最大数量Java题解

Albert

LeetCode 8月月更

什么是 DevOps?看这一篇就够了!

胡说云原生

管理 DevOps 运维 开发 签约计划第三季

技术干货 | 用零信任保护代码安全

权说安全

JS逆向字体反爬,某供应商平台反爬实践

梦想橡皮擦

Python 爬虫 8月月更

手把手教你用 Jenkins 自动部署 SpringBoot

江南一点雨

Java spring jenkins springboot

萌宠来袭,如何让“吸猫撸狗”更有保障?

旺链科技

区块链 产业区块链 宠物行业

直播回放含PPT下载|基于Flink & DeepRec构建Online Deep Learning

阿里云大数据AI技术

深度学习

什么是 DevOps?看这一篇就够了!

玩转Devop和研发效能DevStream/DevLake

DevOps

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