HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

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

关注

评论

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

Vue 2 即将停止更新

南城FE

JavaScript Vue 前端开发

拼多多ID取商品详情API:电商行业的秘密武器与实时数据获取的智慧之路

Noah

一文详解 BRC20 衍生品协议 Bitcat,铭文市场长期发展的助推器

鳄鱼视界

数据库:mysqldump用法详解

百度搜索:蓝易云

MySQL Linux 运维 mysqldump 云服务器

PWM 调光的线性降压 LED 恒流驱动器

梦笔生花

系统综合清理优化推荐 MacCleaner 3 Pro 激活中文版

mac大玩家j

系统优化 Mac软件 系统优化工具

GaussDB整体性能慢分析教程。

百度搜索:蓝易云

云计算 Linux 运维 GaussDB 云服务器

OpenHarmony创新赛圆满收官:引领开源趋势,开启创新技术新纪元

新消费日报

INFINI Labs 产品更新 | Easysearch 新增快照搜索功能,Console 支持 OpenSearch 存储

极限实验室

console easysearch

开放原子云社区正式成立

开放原子开源基金会

Java 开源 程序员 开发者 算法

C 语言教程:数据类型和格式说明符

小万哥

c 程序员 软件 后端 开发

开放原子开源基金会与9个开源项目举行捐赠签约仪式

开放原子开源基金会

Java 开源 程序员 开发者 算法

单口千兆以太网物理层芯片

梦笔生花

【PHP】thinkPHP6中的MVC思想的小案例

Geek_Angel

php mvc thinkphp6

图像处理AI软件推荐:Topaz Photo AI 激活直装版

胖墩儿不胖y

Mac软件 图像处理工具

生成式AI给我们带来的影响

月下独酌

大模型

开源漏洞共享平台及安全奖励计划正式发布

开放原子开源基金会

Java 开源 程序员 开发者 算法

图说技术:我的技术文章配图实践经验

Java 工程师蔡姬

技术人 21 天技术人写作行动营

MacCleaner 3 Pro中文激活:Mac电脑强大的清理优化软件

胖墩儿不胖y

优化软件 Mac软件推荐 系统优化工具

体育直播程序源代码降低搭建门槛,低成本建体育赛事平台成为行业常态

软件开发-梦幻运营部

APIitem_get:你的淘宝商品详情搜索神器

技术冰糖葫芦

API 接口

软件开发

Geek_8da502

Cilium CNI深度指南

俞凡

Kubernetes 云原生 网络 通信

小红书商品详情API:电商助力

Noah

一文详解 BRC20 衍生品协议 Bitcat,铭文市场长期发展的助推

威廉META

如何使用 NFTScan NFT API 在 Viction 网络上开发 Web3 应用

NFT Research

NFT NFT\ NFTScan

为开发者服务,让梦想成为可能|孙文龙理事长发表专题演讲

开放原子开源基金会

Java 开源 程序员 开发者 算法

敏捷任务拆解、工作量评估和指派

laofo

Scrum 敏捷 敏捷开发 研发效能 持续交付

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