QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

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

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

关注

评论

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

Proxyless的多活流量和微服务治理

京东科技开发者

AE镜头光晕插件 optical flares mac版 含许可证

Rose

非常强大的视频编码输出渲染插件 AfterCodecs

Rose

A级模拟机架 Arturia Pre TridA mac版

Rose

河南大学OpenHarmony技术俱乐部正式揭牌成立

科技热闻

MetaLlama大模型

霍格沃兹测试开发学社

IAM的“账号委托”:给权限不给账号,这是什么神操作?

芯盾时代

权限管理 iam 统一身份管理平台

写 TDengine,赢 AirPods!

TDengine

开源 AI 技术 征文 数据库·

推荐一个免费通配符证书平台:SRE运维的选择

外滩运维专家

证书监控 免费SSL证书 免费通配符 免费证书 免费https

e3d插件下载 Video Copilot Element 3D for Mac 附许可证 支持M1/M2

Rose

【永久激活版】Red Giant Trapcode Suite(红巨人粒子特效套装插件)

Rose

关联比赛:  Apache Flink极客挑战赛——Flink TPC-DS性能优化

阿里云天池

数造科技荣登“科创杯”领奖台,开启数据驱动新篇章!

数造万象

基础设施 数据治理 科技 科创中国 大数据、

眼睛糖果滤镜PS插件 Alien Skin Eye Candy 7 附汉化补丁

Rose

PS插件:卡通人物漫画风格一键生成插件Cartoon Maker - Clone - Photoshop Plugin 汉化版

Rose

React Native在移动端落地实践

智在碧得

跨端开发 移动端跨端 跨端技术 Neact Native 智在碧得

平台工程:它是什么?谁来做?怎么做?

北京好雨科技有限公司

rainbond 平台工程 企业号9月PK榜 kubernetes 云

fcpx视频剪辑:Final Cut Pro for Mac 中文版软件下载

你的猪会飞吗

mac软件下载 Final Cut Pro下载 Final Cut Pro中文版 Final Cut Pro破解版 mac破解软件下载

中文汉化版AE插件:Deep Glow发光特效 for mac

Rose

解析淘宝商品详情API返回值中的特殊属性

技术冰糖葫芦

api 网关 API Explorer API 策略 pinduoduo API

效率跃升16倍!火山引擎ByteHouse助力销售数据平台复杂查询效率大幅提高

字节跳动数据平台

数据库 大数据 Clickhouse 云数仓

鸿蒙跨端实践-ArkTS和CAPI的混合开发实现

京东科技开发者

工作五年小结 | 面对不确定性快速上升的外部环境,我们该如何寻求突破?

京东科技开发者

Raw格式图像ps插件 Adobe Camera Raw for Mac 完美破解版

Rose

DR 5中文版(PS一键磨皮插件(Delicious Retouch)

Rose

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