Task.WaitAny 接受任务<T> 而不是任务 [ ]

Task.WaitAny to accept Task<T> instead of Task [ ]

我有一组标记为执行的通用任务。当任务完成时(使用 Task.WaitAny),我将其添加到 ObservableCollection.

但是,问题出在 Task.WaitAny(...) 行,它说 Co-variant array conversion from Task[] to Task[] can cause 运行-time写入操作异常。

我非常了解这个异常的含义以及它在这个阶段抱怨的原因。

问题:有没有通用版本的Task.WaitAny(),可以把Task<T>作为参数,而不是Task[]

提前致谢。

有一个通用的Task.WhenAny

public static Task<Task<TResult>> WhenAny<TResult>(IEnumerable<Task<TResult>> tasks);
public static Task<Task<TResult>> WhenAny<TResult>(params Task<TResult>[] tasks);

await它得到完成的任务。

您可以使用 Task.WhenAny,在您的情况下,它甚至可以像这样简化您的代码

var result = new ObservableCollection<LenderScoreCard>();
var parallelScoreList = parallelScore.ToList();
while (parallelScoreList.Count != 0)
{
    var completedTask = Task.WhenAny(parallelScoreList).Result;
    result.Add(completedTask.Result);
    parallelScoreList.Remove(completedTask);
}