我有4个异步方法在启动我的应用程序时执行。
一旦ALL方法完成,我需要执行最后一行代码。因为它们都是异步执行的,所以如何创建回调以确定最后一个方法何时完成执行?
我考虑过声明一个全局计数器变量,并在每次方法完成时递增它,一旦计数器达到4,最后一行就会执行。
但是我觉得这会让它复杂一点,有没有更简单的方法呢?
public async Task PerformStartupTasksAsync()
{
await CreateSmartsheet();
// RUN THESE 4 ASYNCHRONOUSLY
ImportMainDatabase();
ImportIncomingSurveyResponse();
ImportOutgoingSurveyResponse();
UpdateHouseHoldListDropdown();
// ENABLE CONTROLS HERE, AFTER 4 METHODS HAVE COMPLETED
}
答案 0 :(得分:2)
首先,确保使用TPL异步模型实现异步调用:返回任务或任务,以便异步运行所有内容。然后你可以使用下一行代码:
await Task.WhenAll(new [] {First, Second, Third, etc.});
答案 1 :(得分:0)
Parallel.Invoke(
() => ImportMainDatabase(),
() => ImportIncomingSurveyResponse(),
() => ImportOutgoingSurveyResponse(),
() => UpdateHouseHoldListDropdown()
);
答案 2 :(得分:0)
如果这4种方法是同步的,则无需执行任何操作。他们将连续运行。
如果他们是异步并且他们应该连续运行,那么等待他们。
如果它们是异步的并且可以同时运行,则捕获生成的任务,并在完成任务后使用Task.WhenAll
继续。