我试图接手关于被动延期的正确使用案例(Rx)。 不断出现的例子有:倡议活动(拖拉和下台,绘画),以及乐施会适合网络服务电话等同步应用/业务的建议。
我在申请中工作,我需要为教育、科学和技术部的服务写一个小客户的意向书。 我需要打电话四点,三点是获取一些参考数据(港口、航空公司和地位),第四点是给你一个机场飞行时间的主要服务。
我设立了介绍三个参考数据服务的班级,这些班级方法就是这样:
public Observable<IEnumerable<Airport>> GetAirports()
public Observable<IEnumerable<Airline>> GetAirlines()
public Observable<IEnumerable<Status>> GetStatuses()
public Observable<IEnumerable<Flights>> GetFlights(string airport)
在我的GetFlights方法中,我要求每个飞行员都把飞机离开的机场和飞行作业的航空公司划出。 为此,我需要获得GetAirports和GetAirlines的数据。 每一机场、航空和状态都将加到Dictionar(例如,Dictionary),以便我能够方便地确定每次飞行时间的参照点。
flight.Airport = _airports[flightNode.Attribute("airport").Value]
flight.Airline = _airlines[flightNode.Attribute("airline").Value]
flight.Status = _statuses[flightNode.Attribute("status").Value]
我目前的执行情况现在就是如此:
public IObservable<IEnumerable<Flight>> GetFlightsFrom(Airport fromAirport)
{
var airports = new AirportNamesService().GetAirports();
var airlines = new AirlineNamesService().GetAirlines();
var statuses = new StatusService().GetStautses();
var referenceData = airports
.ForkJoin(airlines, (allAirports, allAirlines) =>
{
Airports.AddRange(allAirports);
Airlines.AddRange(allAirlines);
return new Unit();
})
.ForkJoin(statuses, (nothing, allStatuses) =>
{
Statuses.AddRange(allStatuses);
return new Unit();
});
string url = string.Format(_serviceUrl, 1, 7, fromAirport.Code);
var flights = from data in referenceData
from flight in GetFlightsFrom(url)
select flight;
return flights;
}
private IObservable<IEnumerable<Flight>> GetFlightsFrom(string url)
{
return WebRequestFactory.GetData(new Uri(url), ParseFlightsXml);
}
目前的执行以Serge的答复为基础,利用ForkJoin确保按顺序执行,而且我参考数据在飞行前装上。 这一执行比像我以前一样,不得不发动一场“雷蒂达塔·洛达德”活动,更是leg。