我在某種程度上刪除了這個任務還是自毀?如何正確刪除任務
Task.Factory.StartNew(() => { DoSomeJob(); }, TaskCreationOptions.LongRunning);
,或者是更好地使用它像
var t = Task.Factory.StartNew(() => { DoSomeJob(); }, TaskCreationOptions.LongRunning);
,不知何故後來刪除/ nullize噸?
謝謝!
我在某種程度上刪除了這個任務還是自毀?如何正確刪除任務
Task.Factory.StartNew(() => { DoSomeJob(); }, TaskCreationOptions.LongRunning);
,或者是更好地使用它像
var t = Task.Factory.StartNew(() => { DoSomeJob(); }, TaskCreationOptions.LongRunning);
,不知何故後來刪除/ nullize噸?
謝謝!
你不需要刪除它,它最終會被佈置....
很酷。有沒有任何MSDN鏈接說? –
以下鏈接提供了更詳細的解釋:http://blogs.msdn.com/b/pfxteam/archive/2012/03/25/10287435.aspx –
垃圾收集將處理清理你,你不必守參考t
。
如果你的意思是你可以取消它,或者放棄它,或者以其他方式阻止它在結束之前運行;不,不是真的(因爲它目前是)。您需要創建一個取消標記源,將標記傳遞給任務,然後在任務中運行的方法需要定期檢查以確保它未被取消。
你可以做的是等待一段時間並取消等待操作。這將允許您繼續運行您需要運行的「下一個」任務。請注意,如果你這樣做了,而沒有添加上面討論過的任務本身中的方法檢查刪除的工作,那麼該方法仍然會運行到完成,您將只停止等待它。
如果你只是擔心清理資源的任務使用,一旦它完成運行,您不必擔心。它將全部自動處理。
如果你想自己嘗試並對其進行處理,你就必須要小心。如果它仍然處於運行狀態,你會得到這個異常:
A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled)
因此,最好是用你的第一個例子。
相關:[是否可以接受不調用TPL任務對象上的Dispose()?](http://stackoverflow.com/questions/3734280/is-it-considered-acceptable-to-not-call-處理一個tpl任務對象) –