首页 > 后端开发 > C++ > 我是否需要在'即发即忘”后台操作中处理任务?

我是否需要在'即发即忘”后台操作中处理任务?

Mary-Kate Olsen
发布: 2025-01-03 07:24:40
原创
741 人浏览过

Do I Need to Dispose of Tasks in Fire-and-Forget Background Operations?

“即发即弃”后台任务是否需要进行任务处置?

在后台线程上执行“即发即弃”任务时,开发人员经常使用任务并行库(TPL)方法Task.Factory.StartNew()。此方法返回一个 Task 对象,引发对正确处置的担忧。

msdn 文档 建议在释放对 Task 的最后一个引用之前调用 Dispose()。然而,等待任务完成来调用此方法就否定了后台执行的目的。

讨论

根据 Microsoft pfx 团队的 Stephen Toub 的说法,任务对象可以等待事件完成时包装事件句柄。但是,如果使用延续,则永远不会分配该句柄。因此,最终确定是一种适当的清理方法。

更新(2012 年 10 月)

Toub 的博客文章 “我需要处置任务吗?” 提供了进一步的说明。在 .NET 4.5 中,任务仅在显式使用 AsyncWaitHandle 时分配内部等待句柄。此外,Task 没有终结器;任何分配的句柄都被包装在带有终结器的对象中。这意味着处置大多数 Task 对象是不必要的。

结论

在大多数情况下,避免对用于火灾的 Task 对象调用 Dispose() 是可以接受的- 忘记后台任务。最终确定通常足以进行资源清理。但是,如果使用 AsyncWaitHandle 或应用程序严重依赖此类任务,则可能需要显式处置。

以上是我是否需要在'即发即忘”后台操作中处理任务?的详细内容。更多信息请关注PHP中文网其他相关文章!

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