Is it possible to get successful results from a Task.WhenAll when one of the tasks fails?

后端 未结 4 689
陌清茗
陌清茗 2021-01-03 10:22

Given the following:

var tPass1 = Task.FromResult(1);
var tFail1 = Task.FromException(new ArgumentException(\"fail1\"));
var tFail2 = Task.FromExc         


        
4条回答
  •  长情又很酷
    2021-01-03 10:53

    Maybe

    public async Task RejectFailedFrom(params Task[] tasks)
    {
        try
        {
            await Task.WhenAll(tasks);
        }
        catch(Exception exception)
        {
            // Handle failed tasks maybe
        }
    
        return tasks.Where(task => task.Status == TaskStatus.RanToCompletion).ToArray();
    }
    

    Usage

    var tasks = new[]
    {
        Task.FromResult(1),
        Task.FromException(new ArgumentException("fail1")),
        Task.FromException(new ArgumentException("fail2"))
    };
    
    var succeed = await RejectFailedFrom(tasks);
    // [ tasks[0] ]
    

提交回复
热议问题