2012-10-12 61 views
4

我在某種程度上刪除了這個任務還是自毀?如何正確刪除任務

Task.Factory.StartNew(() => { DoSomeJob(); }, TaskCreationOptions.LongRunning); 

,或者是更好地使用它像

var t = Task.Factory.StartNew(() => { DoSomeJob(); }, TaskCreationOptions.LongRunning); 

,不知何故後來刪除/ nullize噸?

謝謝!

+1

相關:[是否可以接受不調用TPL任務對象上的Dispose()?](http://stackoverflow.com/questions/3734280/is-it-considered-acceptable-to-not-call-處理一個tpl任務對象) –

回答

3

你不需要刪除它,它最終會被佈置....

+0

很酷。有沒有任何MSDN鏈接說? –

+4

以下鏈接提供了更詳細的解釋:http://blogs.msdn.com/b/pfxteam/archive/2012/03/25/10287435.aspx –

1

垃圾收集將處理清理你,你不必守參考t

3

如果你的意思是你可以取消它,或者放棄它,或者以其他方式阻止它在結束之前運行;不,不是真的(因爲它目前是)。您需要創建一個取消標記源,將標記傳遞給任務,然後在任務中運行的方法需要定期檢查以確保它未被取消。

你可以做的是等待一段時間並取消等待操作。這將允許您繼續運行您需要運行的「下一個」任務。請注意,如果你這樣做了,而沒有添加上面討論過的任務本身中的方法檢查刪除的工作,那麼該方法仍然會運行到完成,您將只停止等待它。

Related link

如果你只是擔心清理資源的任務使用,一旦它完成運行,您不必擔心。它將全部自動處理。

Related link

2

如果你想自己嘗試並對其進行處理,你就必須要小心。如果它仍然處於運行狀態,你會得到這個異常:

A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled) 

因此,最好是用你的第一個例子。