我有一大堆任務的定義爲:任務WhenAll使用
Task t1 = new Task(() => { /* Do Something */ });
Task t2 = new Task(() => { /* Do Something */ });
Task t3 = new Task(() => { /* Do Something */ });
Task t4 = new Task(() => { /* Do Something */ });
List<Task> allTasks = new List<Task>();
allTasks.Add(t1);
allTasks.Add(t2); etc.
然後終於:
Task.WhenAll(allTasks).ContinueWith((t) =>
{
MyBlockingCollection.CompleteAdding();
});
foreach (Task t in allTasks)
{
t.Start();
}
我有關上述代碼的問題:
這是正確的方法利用任務?
Task.WhenAll()
本身是否啓動任務,或者我們是否必須明確啓動它們。如果是這樣,我們首先開始,然後做Task.WhenALL()
?
我還需要爲這些任務做異常處理,請您提出處理任務內異常的正確方法。理想情況下,我希望任務在發生異常時將一些診斷信息寫入文本文檔。
我對Tasks界有點新鮮感,感謝您的幫助!
這似乎是關於什麼時候開始任務的問題,可以通過簡單地運行代碼來解決。關於異常處理的 – XenoPuTtSs
雖然我不太確定,但是在處理任務時發生異常的情況下,確實有'State'屬性集'Faulted'。 –
如果您是Tasks的新手,那麼我強烈建議您閱讀其中一篇(如果不是_the_)關於此主題的最佳文章:https://msdn.microsoft.com/en-us/magazine/jj991977.aspx 。它是由[@Stephen Cleary](http://stackoverflow.com/users/263693/stephen-cleary)編寫的 – ken2k