TPL wait for task to complete with a specific return value

前端 未结 2 810
醉话见心
醉话见心 2020-12-10 14:58

I\'d like to make a request to X different web services who will each return either true or false.

These tasks should be executed in parall

2条回答
  •  佛祖请我去吃肉
    2020-12-10 16:00

    You can simply use Task.WhenAny and a predicate multiple times until the "right" task comes along

    async Task WhenAny(IEnumerable> tasks, Func predicate)
    {
        var taskList = tasks.ToList();
        Task completedTask = null;
        do
        {
            completedTask = await Task.WhenAny(taskList);
            taskList.Remove(completedTask);
        } while (!predicate(await completedTask) && taskList.Any());
    
        return completedTask == null ? default(T) : await completedTask;
    }
    

提交回复
热议问题