我有兩個可觀察對象: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