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