我有多个任务返回我想用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;
});
}
答案 0 :(得分:7)
看起来您正在使用不返回值的WaitAll()
重载。如果您进行了以下更改,它应该可以正常工作。
List<string>[] all = await Task.WhenAll(new Task<List<string>>[] { t, t2 })
.ConfigureAwait(false);
答案 1 :(得分:3)
WhenAll的返回类型是一个任务,其结果类型是各个任务的结果类型的数组,在您的情况下为Task<List<string>[]>
在await表达式中使用时,任务将被“解包”到其结果类型中,这意味着“all”变量的类型应为List<string>[]