Получить результат от задачи.WhenAll

у меня есть несколько задач, возвращающих тот же тип объекта, который я хочу вызвать с помощью Task.WhenAll(new[]{t1,t2,t3}); и прочитайте результаты.

когда я пытаюсь использовать

Task<List<string>> all = await Task.WhenAll(new Task[] { t, t2 }).ConfigureAwait(false);

Я получаю ошибку компилятора

невозможно неявно преобразовать тип 'void' в 'System.Threading.Tasks.Task<System.Collections.Generic.List<string>>

обе задачи вызывают метод, подобный этому.

private Task<List<string>> GetFiles(string path)
{
    files = new List<string>();
    return  Task.Run(() =>
    {
       //remove for brevity 
        return files;
    });
}

2 ответов


похоже, вы используете перегрузку WaitAll() это не возвращает значение. Если вы внесете следующие изменения, это должно сработать.

List<string>[] all = await Task.WhenAll(new Task<List<string>>[] { t, t2 })
                               .ConfigureAwait(false);

возвращаемый тип WhenAll-это задача, тип результата которой является массивом типа результата отдельных задач, в вашем случае Task<List<string>[]>

при использовании в выражении await задача будет " развернута "в тип результата, что означает, что тип вашей переменной" all " должен быть List<string>[]