从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