回调4个异步方法C#

时间:2017-03-05 23:05:43

标签: c# asynchronous asynccallback

我有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

    }

3 个答案:

答案 0 :(得分:2)

首先,确保使用TPL异步模型实现异步调用:返回任务或任务,以便异步运行所有内容。然后你可以使用下一行代码:

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

答案 1 :(得分:0)

使用Parallel.Invoke

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

答案 2 :(得分:0)

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

如果他们是异步并且他们应该连续运行,那么等待他们。

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