【发布时间】:2020-02-16 21:54:05
【问题描述】:
使用Catch 运算符可以轻松处理一组特定的异常。我们怎样才能忽略某些异常,而在 Catch 块中处理其余的异常?
例如,我想让ArgumentNullException、ArgumentOutOfRangeException 和TimeoutException 异常冒泡并报告错误,但对于其他任何事情我想重试。
下面的 catch 版本会捕获所有异常,并且无法选择性地忽略某些类型,因为签名要求它返回 IObservable<T>
source.Catch<T, Exception>(e=> Observable.Return(default(T)))
如果我必须重试某些异常,那么我可以编写类似(我认为)的东西
source.Catch<T, WebException>(e=> source.Retry())
【问题讨论】:
-
添加一个代码示例,如果您想在单个命令中执行此检查,例如很难进行多次尝试。流中是否发生此异常?
-
我好像找到了,没注意
Throw签名。这里是return source.Catch<T,Exception>(e => { return e is TimeoutException ? source.Retry() : Observable.Throw<T>(e); });
标签: system.reactive