.NET 6 C# 从 List<Task> 获取结果不起作用

use*_*400 2 c# task .net-6.0

我有 ASP.NET Core 6 API 的一部分,用于与另一个服务连接。这是一个批量操作(最多可能有 2 到 4 个操作),我想并行执行它。

为了实现这一目标,我正在尝试利用这样的任务:

List<Task> tasks = new List<Task>();

foreach(var item in items)
{
    tasks.Add(PerformTask(item));
}

await Task.WhenAll(tasks);

foreach(var task in tasks)
{
    task.Result;
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试从每个任务获取结果时,“结果”属性不存在。

我缺少什么?

Gur*_*ron 10

Result是 generic 的属性Task<TResult>。如果PerformTask返回Task某种类型,则创建List<Task<TypeReturnedByPerformTask>>. 此外,您将能够在不.Result调用的情况下获取结果(有一个通用重载Task.WhenAll它返回Task结果类型的数组):

List<Task<TypeReturnedByPerformTask>> tasks = ...;
// ...
TypeReturnedByPerformTask[] results = await Task.WhenAll(tasks);
Run Code Online (Sandbox Code Playgroud)