将本地结果与可能的(超时/错误)异步 Web 结果相结合
我有两种方法都返回 IObservable
IObservable<Something[]> QueryLocal();
并且
IObservable<Something[]> QueryWeb();
QueryLocal 总是成功的。 QueryWeb 很容易出现超时和可能出现的 Web 错误。
我希望实现一个 QueryLocalAndWeb() 来调用两者并组合它们的结果。 到目前为止,我已经:
IObservable<Something[]> QueryLocalAndWeb()
{
var a = QueryLocal();
var b = QueryWeb();
var plan = a.And(b).Then((x, y) => x.Concat(y).ToArray());
return Observable.When(plan).Timeout(TimeSpan.FromSeconds(10), a);
}
但是,我不确定它是否可以处理 QueryWeb 产生错误的情况。 将来我可能还会有一个 QueryWeb2() 也需要考虑在内。
那么,如何组合多个 IObservables 的结果而忽略抛出错误(或超时)的结果呢?
I have two methods that both return an IObservable
IObservable<Something[]> QueryLocal();
and
IObservable<Something[]> QueryWeb();
QueryLocal is always successful. QueryWeb is susceptible to both a timeout and possible web errors.
I wish to implement a QueryLocalAndWeb() that calls both and combines their results.
So far I have:
IObservable<Something[]> QueryLocalAndWeb()
{
var a = QueryLocal();
var b = QueryWeb();
var plan = a.And(b).Then((x, y) => x.Concat(y).ToArray());
return Observable.When(plan).Timeout(TimeSpan.FromSeconds(10), a);
}
However, I'm not sure that it handles the case where QueryWeb yields an error.
In the future I might have a QueryWeb2() that also needs to be taken into account.
So, how do I combine the results from a number of IObservables ignoring the ones that throw errors (or time out)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我想
OnErrorResumeNext
应该能够处理这种情况:来自 MSDN:
您可以通过对返回的可观察值使用聚合来执行数组的连接。
我假设本地和网络都是冷可观察的,即只有当有人订阅它们时它们才开始产生值。
I guess
OnErrorResumeNext
should be able to handle this scenario:From MSDN:
You can do concat of array by using Aggregation on the returned observable.
I am assuming that both local and web are cold observable i.e they start producing values only when someone subscribes to them.
怎么样:
How about: