给定一个集合Tasks:
var americanAirlines = new FlightPriceChecker("AA");
...
var runningTasks = new List<Task<IList<FlightPrice>>>
{
americanAirlines.GetPricesAsync(from, to),
delta.GetPricesAsync(from, to),
united.GetPricesAsync(from, to)
};
我想GetPricesAsync()以它们到达的任何顺序处理结果。目前,我正在使用 while 循环来实现这一点:
while (runningTasks.Any())
{
// Wait for any task to finish
var completed = await Task.WhenAny(runningTasks);
// Remove from running list
runningTasks.Remove(completed);
// Process the completed task (updates a property we may be binding to)
UpdateCheapestFlight(completed.Result);
}
这是一个可以使用 Rx 更优雅地解决的问题吗?我尝试使用类似下面的代码但卡住了,因为我必须在某个地方await每个getFlightPriceTask都会阻塞,然后才执行下一个,而不是执行第一个完成的然后等待下一个:
runningTasks
.ToObservable()
.Select(getFlightPriceTask => .???.)
翻过高山走不出你
慕尼黑5688855
BIG阳
相关分类