等待数组中的第一个任务以匹配条件

时间:2016-11-16 07:09:04

标签: c# async-await

我有texture。当第一个Task<bool>[] myTasks返回Task时,我如何得到通知(等待)?

1 个答案:

答案 0 :(得分:12)

基本上,您需要保留一组不完整的任务,并重复使用Task.WhenAny,检查结果,并继续(删除该任务),如果结果不是您要查找的结果。例如:

ISet<Task<bool>> activeTasks = new HashSet<Task<bool>>(myTasks);
while (activeTasks.Count > 0)
{
    Task<bool> completed = await Task.WhenAny(activeTasks);
    if (completed.Status == TaskStatus.RanToCompletion &&
        completed.Result)
    {
        // Or take whatever action you want
        return;
    }
    // Task was faulted, cancelled, or had a result of false.
    // Go round again.
    activeTasks.Remove(completed);
}
// No successful tasks - do whatever you need to here.