2017-03-05 98 views
-2

我有4個異步方法在我的應用程序啓動時執行。4種異步方法的回調C#

一旦所有方法都完成,我需要執行最後一行代碼。因爲它們都是異步執行的,所以如何創建回調以確定最後一個方法何時完成執行?

我想過宣佈一個全局計數器變量,並在每次方法結束時遞增它,一旦計數器達到4,最後一行就會執行。

但我認爲這會讓它變得複雜一點,有沒有更簡單的方法呢?

public async Task PerformStartupTasksAsync() 
    { 
     await CreateSmartsheet(); 

     // RUN THESE 4 ASYNCHRONOUSLY 

     ImportMainDatabase(); 
     ImportIncomingSurveyResponse(); 
     ImportOutgoingSurveyResponse(); 
     UpdateHouseHoldListDropdown(); 

     // ENABLE CONTROLS HERE, AFTER 4 METHODS HAVE COMPLETED 

    } 
+0

4種方法的簽名是什麼?他們是「異步」嗎? – JohanP

+2

這四種方法如何異步執行?他們是否使用並返回「任務」?他們是否明確產生線程?他們排隊到ThreadPool? –

回答

2

首先,確保你使用TPL異步模式實現異步調用:返回任務或任務的一切異步運行。然後,你可以用下一行代碼:

await Task.WhenAll(new [] {First, Second, Third, etc.}); 
0

使用Parallel.Invoke

Parallel.Invoke(
    () => ImportMainDatabase(), 
    () => ImportIncomingSurveyResponse(), 
    () => ImportOutgoingSurveyResponse(), 
    () => UpdateHouseHoldListDropdown() 
); 
0

如果這些4個方法是同步的,你不需要做任何事情。他們將連續運行。

如果他們是異步的,他們應該連續運行,然後等待他們。

如果它們是異步的並且它們可以同時運行,那麼捕獲結果任務並在全部完成時使用Task.WhenAll繼續。