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);
}
我有一组标记为执行的通用任务。当任务完成时(使用 Task.WaitAny
),我将其添加到 ObservableCollection
.
但是,问题出在 Task.WaitAny(...)
行,它说 Co-variant array conversion from Task
我非常了解这个异常的含义以及它在这个阶段抱怨的原因。
问题:有没有通用版本的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);
}