首页 > 后端开发 > C++ > 我应该在 TPL 中处理'即发即忘”任务吗?

我应该在 TPL 中处理'即发即忘”任务吗?

Susan Sarandon
发布: 2025-01-03 20:35:40
原创
200 人浏览过

Should I Dispose of Fire-and-Forget Tasks in the TPL?

使用任务并行库执行即发即弃任务:处置问题

使用任务并行触发即发即弃任务时库(TPL)中,开发人员通常面临有关正确处理任务对象的问题。虽然 MSDN 文档强调需要在发布最后一个引用之前调用 Dispose(),但不这样做的实际影响尚不清楚。

根据 Microsoft 的 Stephen Toub 的说法,任务处置主要是为了处理潜在的非托管资源等待任务完成时使用。但是,在仅使用延续的场景中(例如在“即发即弃”任务中),不会分配此事件句柄。

在最近的一篇博客文章中,Toub 进一步阐明,在 .Net 4.5 中,内部仅当显式检索 IAsyncResult.AsyncWaitHandle 属性时才分配等待句柄。而且,Task对象本身没有终结器;相反,句柄被封装在带有终结器的对象中。除非分配句柄,否则不会调用终结器。

摘要

基于这些见解:

  • 是吗可以不在此任务类上调用 Dispose()

在大多数情况下,是的,不调用 Dispose() 是可以接受的。终结器将处理清理。

  • 有任何文档讨论这个吗?

是的,Stephen Toub 的博客文章提供了详细的解释。

  • 是否有适当的方法来处理任务对象我错过了?

大多数情况下不需要调用 Dispose()。

  • 是否有另一种方法可以执行即发即忘任务与 TPL?

不,使用的模式Task.Factory.StartNew() 是执行即忘任务的建议方法。

以上是我应该在 TPL 中处理'即发即忘”任务吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板