我很開心與System.Threading.Tasks
一起工作。然而,我看到的許多代碼示例看起來像這樣:我是否需要處置任務?
Dim lcTask = Task.Factory.StartNew(Sub() DoSomeWork())
Dim lcTaskLong = Task.Factory.StartNew(Sub() DoSomeWork(), TaskCreationOptions.LongRunning)
Task.WaitAll(lcTask, lcTaskLong)
這就是樣本的範圍。
任務執行IDisposable
,所以顯然我應該把它們處理掉,但是如果我只是想「火與忘」呢?
如果我不處理,我會泄漏線程/句柄/內存/業障嗎? 我是否在使用任務「錯誤」? (應該只是使用委託並單獨留下任務?)
我可以在ContinueWith()
中處理嗎? (這似乎是玩俄羅斯輪盤賭。)
And ... \t \t [CodeAnalysis.SuppressMessage(「Microsoft.Reliability」,「CA2000」,Justification =「http://stackoverflow.com/questions/5985973/do-i-need-to-dispose-of -a-task「)] – GarethOwen 2012-06-18 15:03:18
根據您鏈接到的Stephen Toub線程判斷,我認爲當您說」需要[等待句柄]以允許任務繼續正常工作並且僅在存在如果沒有延續,任務的Dispose方法沒有實際效果......「但根據Toub的說法,」Task.Dispose的存在是由於任務可能包裝了一個事件句柄......如果你正在做的正在使用continuation,那個事件句柄永遠不會被分配,並且Dispose的值會大大減少。「即與上面暗示的相反。 – 2015-09-06 19:14:58