Kru*_*lur 7 c# system.reactive
鉴于以下集合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)
};
Run Code Online (Sandbox Code Playgroud)
我想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);
}
Run Code Online (Sandbox Code Playgroud)
这是一个可以使用Rx更优雅地解决的问题吗?我试图用类似下面的代码,但卡住了,因为地方我不得不await每getFlightPriceTask这将阻止,然后才执行下一个,而不是采取的第一个这样做了,然后等待下一次:
runningTasks
.ToObservable()
.Select(getFlightPriceTask => .???.)
Run Code Online (Sandbox Code Playgroud)
尝试这个:
runningTasks
.Select(getFlightPriceTask => getFlightPriceTask.ToObservable())
.Merge()
.Subscribe(flightPrices => UpdateCheapestFlight(flightPrices))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |