2

我有一組模塊需要初始化,其中3個模塊需要很長時間,而其他模塊只需很少的時間來初始化。目前,如果在同一個線程上執行所有這些操作,則需要很長時間,例如,如何在c#4.0中實現任務延續

foreach (var m in modules) 
{ 
    var md = m; 
    md.Initialise(); 
} 

,所以我想是這樣

也試過:

Parallel.ForEach(modules, m => m.Initialize()); 

這些作品無論是因爲它不會等待要初始化所有模塊。 我需要在UI線程可以繼續之前初始化所有模塊,否則在第一個模塊初始化並且由於其他模塊未初始化而變成空殼的情況下,UI將很快啓動。有沒有什麼辦法來實現每個模塊在單獨的線程上初始化,並且主線程將等待直到它們全部被初始化?希望我已經說清楚了。 謝謝。

回答

0

您可以同時做你的foreach

Parallel.ForEach(modules, m => m.Initialize()); 
+0

對不起忘了提,我已經嘗試過這一點,並沒有奏效。我認爲在這種情況下,Parallel.ForEach不會執行延續,即如果一個模塊需要1秒來初始化,另一個需要10秒來初始化,那麼主線程將只暫停1秒而不是10秒。 – stt106 2014-10-02 11:20:47

+2

@ stt106這是不正確的。 'Parallel.ForEach'阻塞,直到處理完所有項目。也許你錯誤地嘗試過'Parallel.ForEach'和'Task.Factory.StartNew'? – 2014-10-02 11:35:58

+0

@YuvalItzchakov抱歉,您是對的。我在做一些愚蠢的事情,儘管不是一起使用平行和任務。我認爲這回答了我問的問題,雖然它不能完全解決我的問題,但我認爲現在的問題不是關於並行性,所以我將其標記爲正確的答案。 – stt106 2014-10-03 22:05:02