首页 > 解决方案 > 运行 Task.WhenAll(taks) 后如何从 Task 获取数据

问题描述

我有多个 Async 方法可以一个一个运行,但是当我使用 Task.WhenAll 时,我真的不知道如何得到结果。以下是我的异步方法

    public async Task<IEnumerable<MyModel>> Method1Async()
    {
        return await Task<IEnumerable<MyModel>>.Run<IEnumerable<MyModel>>(() => GetMethod1Data());
    }
    //Here Method1Async().Result will get me the data but don't know how to get the result when I am using Task.WhenAll() 

    public async Task<IEnumerable<MyModel>> Method2Async()
    {
        return await Task<IEnumerable<MyModel>>.Run<IEnumerable<MyModel>>(() => GetMethod2Data());
    }

    public async Task<IEnumerable<MyModel>> Method3Async()
    {
        return await Task<IEnumerable<MyModel>>.Run<IEnumerable<MyModel>>(() => GetMethod3Data());
    }

这是我使用 Task.WhenAll 的代码

    public async Task GetDataAsync()
    {
        Task[] tasks = new Task[3];

        tasks[0] = Method1Async();
        tasks[1] = Method2Async();
        tasks[2] = Method2Async();

        await Task.WhenAll(tasks).ConfigureAwait(false);
    }

现在如果我打电话

获取数据异步()

方法,我一切正常,但不知道如何从返回的任务中获取结果?

标签: c#asynchronous

解决方案


它将返回一个类型的数组,IEnumerable<MyModel>因此您可以将异步方法的返回类型设置为:

public Task<IEnumerable<MyModel>[]> GetDataAsync()
{
    Task[] tasks = new Task[3];

    tasks[0] = staticDataService.Method1Async();
    tasks[1] = staticDataService.Method2Async();
    tasks[2] = staticDataService.Method3Async();

    return Task.WhenAll(tasks);
}

然后消费它:

IEnumerable<MyModel>[] results = await GetDataAsync();

推荐阅读