从Task.WhenAll获得结果

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

当我尝试使用时

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

我收到编译器错误

无法将类型’void’隐式转换为'System.Threading.Tasks.Task<System.Collections.Generic.List>

这两个任务都是类似的调用方法。

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

看起来你正在使用不返回值的WaitAll()重载。 如果进行以下更改,则应该可以正常工作。

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

WhenAll的返回类型是一个任务,其结果类型是各个任务的结果类型的数组,在您的情况下Task[]>

当在await表达式中使用时,任务将被“解包”到其结果类型中,这意味着“all”变量的类型应为List[]