2017-03-05 85 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继续。