У меня есть два наблюдаемых: 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 (идентификатор) и loadServer (идентификатор) запускаемых , Если loadLocal (id) возвращает элемент, я не хочу запускать loadServer (id).
var load = id => loadLocal(id).Zip(loadServer(id), (local, server) => local ?? server);
Вы не "получать" значения при использовании 'IObservable'. Вместо этого вы вызываете (через 'Subscribe') при создании нового значения. Я действительно не понимаю ваш вопрос, так что, возможно, вы можете предоставить более подробную информацию о своих наблюдаемых и о том, как они играют вместе? –
Обновлен вопрос с подробной информацией о реальном сценарии. – Pking
Я нашел решение: var load = id => от localAsset в loadLocal (id) от актива в (localAsset! = Null? Observable.Return (localAsset): loadServer (id)) select asset; – Pking