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:

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

如果这 4 个方法是同步的,则您无需执行任何操作。他们将 运行 连续。

如果它们是异步的并且它们应该 运行 串行,然后等待它们。

如果它们是异步的并且它们可以同时 运行,则捕获生成的任务并在它们全部完成后使用 Task.WhenAll 继续。