我有两个可观察对象:LoadLocal和LoadServer。 LoadLocal从本地源加载并返回一个元素,LoadServer从服务器获取它。我想将它们组合成另一个可观察的:Load。我想Load从LoadLocal获取元素,如果它为null,我想从LoadServer返回元素。任何想法如何做到这一点?组合可观察对象
感谢
在真实的情景详情:
// loadLocal(id) gives me an observable that returns an asset from a local source
Func<Guid, IObservable<IAsset>> loadLocal = Observable.ToAsync<Guid, IAsset>(id => GetLocalAsset(id));
var svcClient = new ServiceClient<IDataService>();
var svc = Observable.FromAsyncPattern<Request, Response>(svcClient.BeginInvoke, svcClient.EndInvoke);
// calling loadServer(id) gives me an observable that returns an asset from a server
var loadServer = id => from response in svc(new Request(id)) select response.Asset;
// so at this point i can call loadServer(id).Subscribe() to get an asset with specified id from the server, or I can call loadLocal(id).Subscribe() to get it from local source.
// however I want another observable that combines the two so I can do: load(id).Subscribe() that gets the asset from loadLocal(id) and if it is null it gets it from loadServer(id)
var load = ???
下几乎给了我希望的结果,但是双方loadLocal(ID)和loadServer(id)获得运行。如果loadLocal(id)返回一个元素,我不希望loadServer(id)运行。
var load = id => loadLocal(id).Zip(loadServer(id), (local, server) => local ?? server);
当你使用'IObservable'你不 “取” 的价值观。相反,当你创建一个新值时,你会被调用(通过'Subscribe')。我真的不明白你的问题,所以也许你可以提供一些关于你的观察对象以及他们如何一起玩的细节? – 2012-04-21 16:25:08
更新了有关真实场景的详细信息。 – Pking 2012-04-21 16:47:07
我找到了解决方案: VAR负载= ID =>从localAsset在loadLocal(ID) 从在(localAsset = NULL Observable.Return(localAsset)!?:loadServer(ID))的资产 选择的资产; – Pking 2012-04-21 18:32:36