Как получить данные из Task после запуска Task.WhenAll (taks) - PullRequest
0 голосов
/ 04 марта 2019

У меня есть несколько асинхронных методов, которые я могу запустить один за другим, но когда я использую 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);
    }

Теперь, если я вызову

GetDataAsync ()

метод, у меня все нормально, но не знаю, как получить результат от возвращенного задания?

1 Ответ

0 голосов
/ 04 марта 2019

Он вернет массив типа 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...