Task.WhenAny for non faulted tasks

前端 未结 2 1600
情深已故
情深已故 2021-01-23 08:08

The description of the Task.WhenAny method says, that it will return the first task finished, even if it\'s faulted. Is there a way to change this behavior, so it w

2条回答
  •  情书的邮戳
    2021-01-23 08:24

    Something like this should do it (may need some tweaks - haven't tested):

    private static async Task WaitForAnyNonFaultedTaskAsync(IEnumerable tasks)
    {
        IList customTasks = tasks.ToList();
        Task completedTask;
        do
        {
            completedTask = await Task.WhenAny(customTasks);
            customTasks.Remove(completedTask);
        } while (completedTask.IsFaulted && customTasks.Count > 0);
    
        return completedTask.IsFaulted?null:completedTask;
    }
    

提交回复
热议问题