从 Task.WhenAll 中获取结果

Get result from Task.WhenAll

我有多个任务返回相同的对象类型,我想使用 Task.WhenAll(new[]{t1,t2,t3}); 调用并读取结果。

当我尝试使用

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

我收到编译器错误

Cannot implicitly convert type 'void' to '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;
    });
}

WhenAll 的 return 类型是一个任务,其结果类型是单个任务结果类型的数组,在您的例子中 Task<List<string>[]>

当在 await 表达式中使用时,任务将 "unwrapped" 转换为它的结果类型,这意味着您的 "all" 变量的类型应该是 List<string>[]

看起来您使用的 WaitAll() 的重载没有 return 值。如果您进行以下更改,它应该会起作用。

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