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

Mil*_*leu 5 c# async-await

我有一个Task<bool>[] myTasks.第一次Task返回时如何收到通知(等待)true

Jon*_*eet 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.
Run Code Online (Sandbox Code Playgroud)

  • @Milleu:因为任务可能已被取消或出现故障而非成功. (2认同)