从Task.WhenAll获取结果
本文关键字:结果 获取 WhenAll Task | 更新日期: 2023-09-27 18:04:08
我有多个任务返回相同的对象类型,我想使用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>>
两个任务都在调用类似this的方法。
private Task<List<string>> GetFiles(string path)
{
files = new List<string>();
return Task.Run(() =>
{
//remove for brevity
return files;
});
}
看起来你正在使用不返回值的WaitAll()
的过载。如果您做了以下更改,它应该可以工作。
List<string>[] all = await Task.WhenAll(new Task<List<string>>[] { t, t2 })
.ConfigureAwait(false);
WhenAll的返回类型是一个任务,其结果类型是单个任务的结果类型的数组,在您的示例中是Task<List<string>[]>
当在await表达式中使用时,任务将被"解包装"为其结果类型,这意味着您的"all"变量的类型应该是List<string>[]