首頁 > 後端開發 > C++ > 我應該在 TPL 中處理「即發即忘」任務嗎?

我應該在 TPL 中處理「即發即忘」任務嗎?

Susan Sarandon
發布: 2025-01-03 20:35:40
原創
198 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板