我有一系列标记为执行的通用任务。当任务完成时(使用Task.WaitAny
),我将其添加到ObservableCollection
。
但是,问题出在Task.WaitAny(...)
行,其中说从任务< MyType> []到Task []的共变阵列转换可能会导致写入操作的运行时异常。
我对这个异常的含义及其在此阶段抱怨的原因非常了解。
问题:是否存在Task.WaitAny()
的通用版本,可以将Task<T>
作为参数而不是Task[]
。
提前致谢。
答案 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);
}