我正在尝试做这样的事情:

foreach (var o in ObjectList)
{
    CalculateIfNeedToMakeTaskForO(o);

    if (yes)
        TaskList.Add(OTaskAsync());
}

现在,我要等待所有这些任务完成。
除了做
foreach(var o in ObjectList)
{
    Result.Add("result for O is: "+await OTaskAsync());
}

有什么我能做的吗? (更好,更优雅,更“正确”)

最佳答案

您正在寻找 Task.WaitAll (假设您的TaskList实现了IEnumerable<Task>)

Task.WaitAll(TaskList.ToArray());

编辑:由于WaitAll只接受一个任务数组(或可变参数数组形式的Task列表),因此您必须转换Enumerable。如果需要扩展方法,可以执行以下操作:
public static void WaitAll(this IEnumerable<Task> tasks)
{
    Task.WaitAll(tasks.ToArray());
}

TaskList.WaitAll();

但这实际上只是语法糖。

07-25 20:55