Task.WaitAny接受Task <t>而不是Task []

时间:2015-10-07 18:36:42

标签: c# multithreading generics task-parallel-library task

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

但是,问题出在Task.WaitAny(...)行,其中说从任务&lt; MyType&gt; []到Task []的共变阵列转换可能会导致写入操作的运行时异常。

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

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

提前致谢。

code

2 个答案:

答案 0 :(得分:2)

有一个通用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它可以完成任务。

答案 1 :(得分:2)

您可以使用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);
}