在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

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

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

关注

评论

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

LeetCode:240. 搜索二维矩阵 II,二分查找,详细注释

Lee Chen

JavaScript 算法 LeetCode

【NeurIPS 2022】视频动作识别,AFNet 用更低的成本接收更多数据

Zilliz

分布式事务系统Seata的这些安保机制是否会让你更放心

Java 分布式 Spring Boot seata

BSN-DDC基础网络详解(三):注册门户账号和业务开通(1)

BSN研习社

热点面试题:JS 中 call, apply, bind 概念、用法、区别及实现?

Immerse

JavaScript call apply bind 前端面试题

修改ctags让fzf.vim插件显示C,C++方法声明的标签

ctags fzf.vim

Matic链矩阵公排智能合约挖矿dapp系统开发详情(案例演示)

开发微hkkf5566

软件测试/测试开发 | 想做App测试就一定要了解的App结构

测试人

软件测试 自动化测试 测试开发 app测试

flutter系列之:在flutter中使用导航Navigator

程序那些事

flutter 大前端 程序那些事

项目上线后我是如何通过慢查询和索引让系统快起来的

MySQL 数据库 索引

在TitanIDE中使用ChatGPT辅助科研开发

行云创新

AI 云端开发 TitanIDE

微服务-常见配置中心工作原理

Java 微服务 配置中心

华为云API Arts:用“1+1+5”的模式,为你带来API-First体验

华为云开发者联盟

云计算 后端 华为云 企业号 2 月 PK 榜 华为云开发者联盟

苏宁基于 AI 和图技术的智能监控体系的建设

NebulaGraph

运维 图数据库

带你动手设计一个高速公路多节点温度采集系统

华为云开发者联盟

云计算 物联网 华为云 企业号 2 月 PK 榜 华为云开发者联盟

MQTT保留消息是什么?如何使用?

EMQ映云科技

物联网 IoT mqtt 企业号 2 月 PK 榜 保留消息

软件测试/测试开发 | app测试中常用的Android模拟器

测试人

android 软件测试 自动化测试 测试开发

为什么推荐一个容器只运行一个进程?

追赶者

k8s 为什么

京东力荐!深入理解高并发编程手册,GitHub上线3小时飙升榜首

Java 并发编程 高并发

体验AI乐趣:基于AI Gallery二分类猫狗图片分类小数据集自动学习

华为云开发者联盟

人工智能 华为云 企业号 2 月 PK 榜 华为云开发者联盟

为什么面试 SaaS 产品经理一定要问权限管理?

产品海豚湾

产品经理 SaaS 权限管理 B端 产品面试

墨天轮发布数据库行业报告,亚信科技AntDB“超融合+流式实时数仓”开启新纪元

亚信AntDB数据库

数据库 AntDB 国产数据库 AntDB数据库 企业号 2 月 PK 榜

MQTT QoS 0,1,2介绍

EMQ映云科技

物联网 IoT mqtt QoS 企业号 2 月 PK 榜

聚焦中国大数据流程挖掘,这场发布会值得关注!

ToB行业头条

MQTT持久会话与Clean Session详解

EMQ映云科技

物联网 IoT mqtt 企业号 2 月 PK 榜 持久会话

佛萨奇2.0智能合约矩阵公排系统开发源代码(可改链)

开发微hkkf5566

到底怎么理解分布式事务

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