从 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);
我有多个任务返回相同的对象类型,我想使用 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);