写点什么

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

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

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

关注

评论

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

什么是分治算法?

InfoQ IT百科

企业如何进行数字化转型?零代码简道云剑指「全民开发」新机遇

ToB行业头条

单调栈与栈的区别是什么?

InfoQ IT百科

在Windows中,当一个应用程序窗口被关闭,该应用程序将会保留在哪里?

InfoQ IT百科

递归算法的三个定律是什么?

InfoQ IT百科

国厂自研的操作系统都有哪些?

InfoQ IT百科

输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

InfoQ IT百科

什么是“哈希算法”?

InfoQ IT百科

输入一个链表,输出该链表中倒数第k个结点。

InfoQ IT百科

计算机操作系统最基本的特征是什么?

InfoQ IT百科

加密算法有哪几种?

InfoQ IT百科

PCB是什么?主要作用是什么?

InfoQ IT百科

数组去重的5种方法是什么?

InfoQ IT百科

易周金融观点 | 个人养老金制度正式出炉;居民贷款延期还款政策密集落地

易观分析

银行 养老金制度

EventBridge 集成云服务实践

阿里巴巴云原生

阿里云 云原生 事件总线 EventBridge 事件源

操作系统中的文件管理系统为用户提供的功能是什么?

InfoQ IT百科

写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度

InfoQ IT百科

如何判断两个字符串是否互为回文?

InfoQ IT百科

高级调度和低级调度的主要任务分别是什么?

InfoQ IT百科

算法的五大特征是什么?

InfoQ IT百科

Plato Farm 的MARK 处于永远通缩,经济模型解析

西柚子

计算单链表的长度。

InfoQ IT百科

动态重定位需要由什么来实现?

InfoQ IT百科

在电脑中采用虚拟机结构的优劣是什么?

InfoQ IT百科

Springboot支持Emoji表情怎么实现?

InfoQ IT百科

有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

InfoQ IT百科

数据结构和算法的关系?

InfoQ IT百科

消息传递通信的实现方式?

InfoQ IT百科

图数据库|如何从零到一构建一个企业股权图谱系统

NebulaGraph

数据库 知识图谱

什么是满二叉树?

InfoQ IT百科

作业是什么?有哪些状态?操作系统如何控制管理作业?

InfoQ IT百科

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