gpt4 book ai didi

c# - 如何使用谓词实现 Task.WhenAny()

转载 作者:太空狗 更新时间:2023-10-30 00:23:28 24 4
gpt4 key购买 nike

我想同时执行多个异步任务。每个任务将运行一个 HTTP 请求,该请求可以成功完成或引发异常。我需要等待直到第一个任务成功完成,或者直到所有任务都失败。

如何实现 Task.WhenAny 的重载接受谓词的方法,以便我可以排除未成功完成的任务?

最佳答案

等待任何任务,如果满足条件则返回任务。否则再次等待其他任务,直到没有更多任务等待。

public static async Task<Task> WhenAny( IEnumerable<Task> tasks, Predicate<Task> condition )
{
var tasklist = tasks.ToList();
while ( tasklist.Count > 0 )
{
var task = await Task.WhenAny( tasklist );
if ( condition( task ) )
return task;
tasklist.Remove( task );
}
return null;
}

简单检查一下

var tasks = new List<Task> {
Task.FromException( new Exception() ),
Task.FromException( new Exception() ),
Task.FromException( new Exception() ),
Task.CompletedTask, };

var completedTask = WhenAny( tasks, t => t.Status == TaskStatus.RanToCompletion ).Result;

if ( tasks.IndexOf( completedTask ) != 3 )
throw new Exception( "not expected" );

关于c# - 如何使用谓词实现 Task.WhenAny(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38289158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com