LoadLocalとLoadServerの2つのオブザーバブルがあります。LoadLocalは、ローカルソースから要素をロードして返し、LoadServerはそれをサーバーからフェッチします。それらを別のオブザーバブルに結合したいと思います:ロード。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);