使用任務並行庫執行即發即棄任務:處置問題
使用任務並行觸發即發即棄任務時庫(TPL )中,開發人員通常面臨有關正確處理任務對象的問題。雖然 MSDN 文件強調需要在發布最後一個引用之前呼叫 Dispose(),但不這樣做的實際影響尚不清楚。
根據 Microsoft 的 Stephen Toub 的說法,任務處置主要是為了處理潛在的非託管資源等待任務完成時使用。但是,在僅使用延續的場景中(例如在「即發即棄」任務中),不會指派此事件句柄。
在最近的一篇部落格文章中,Toub 進一步闡明,在 .Net 4.5 中,內部僅當明確檢索 IAsyncResult.AsyncWaitHandle 屬性時才分配等待句柄。而且,Task物件本身沒有終結器;相反,句柄被封裝在帶有終結器的物件中。除非分配句柄,否則不會呼叫終結器。
摘要
基於這些見解:
在大多數情況下,是的,不調用Dispose() 是可以接受的。終結器將處理清理。
是的,Stephen Toub 的部落格文章提供了詳細的解釋。
大多數情況下不需要呼叫 Dispose()。
不,使用的模式Task.Factory.StartNew() 是執行即忘任務的建議方法。
以上是我應該在 TPL 中處理「即發即忘」任務嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!