2013-04-24 15 views
5

我想異步運行一些對象的初始化,但有些對象依賴於其他被初始化的對象。然後在我的應用程序的其餘部分繼續之前,所有對象都需要進行初始化。您可以多次調用任務的Wait()嗎?

是否有可能在任務上調用Wait(),然後再次對其調用Wait(),或者在包含它的集合中對WaitAll()進行調用?

Dictionary<String, Task> taskdict = new Dictionary<String, Task>(); 

    taskdict.Add("Task1", 
     Task.Factory.StartNew(() => { 
     //Do stuff 
     })); 

    taskdict.Add("Task2", 
     Task.Factory.StartNew(() => { 
      taskdict[ "Task1" ].Wait(); 

     //Do stuff 

     })); 

     try { 
     Task.WaitAll(taskdict.Values.Convert<Task[ ]>()); 
     } 

或者第二個Wait()/ WaitAll()會失敗嗎?

回答

18

你當然可以等待一個任務兩次。您可以根據需要多次等待任務,且無任何負面影響。現在,如果你已經在同一個線程中等待任務,它已經完成了,所以未來Wait調用將立即返回,因爲沒有什麼可以等待,但它們肯定不會失敗或產生不適當的結果結果。

注意,如果一個任務沒有正常完成,並改爲取消或不能完成爲異常的結果被拋出,然後調用Wait將重新拋出異常(每次調用Wait時間)。如果Wait正在爲您拋出例外情況,那麼有可能是這個原因。

+1

感謝您的明確答案。有關異常處理的詳細信息。這是我必須考慮的一個重要問題。 – 2013-04-25 09:24:05

+0

@Servy如果我想讓任務重新運行,請等待。我怎樣才能使任務結果失效? – 2016-07-30 07:40:08

+0

@MerdanGochmuradov你不能。這不是如何工作的。 – Servy 2016-08-01 01:49:24

相關問題