吞咽IObservable异常

时间:2013-05-29 21:06:02

标签: exception system.reactive

是否可以设计一个Rx运算符,它以相同的顺序吞下重复的异常(与Retry或Catch不同)?本质上与.Select(x => x)相同,但在此过程中忽略异常。 (我知道这是违反准则的。)

2 个答案:

答案 0 :(得分:6)

简短的回答是" no"。

稍微简短的回答是你的前提是有缺陷的;这是因为你不能有一个Observable抛出多个错误,而你假设的运算符将是一个Observer。根据定义,观察者不应该影响Observables(只是不要告诉我Heisenberg我说过。)

因此,这样的运算符在逻辑上是不可能的,因为它需要更改历史记录 - 返回并防止Observable抛出异常。当然,除非您的Observable违反了Rx的规则。

不要这样做。 :)无论如何,Rx会做得很好。例如,Subject<T>只是在第一次OnError之后才发布。

答案 1 :(得分:2)

所有Rx操作符都遵循这些准则(它们保证您只会收到一个错误,然后才能完成observable)。因此,通过Reactive库创建的任何 observable都不会被哄骗通过允许多个错误。

您需要编写自己的IObservable<T>自定义实现和您自己的自定义运算符(未使用任何Reactive运算符)来实现您的目标。

但我不建议在没有进一步设计工作的情况下走这条路。你真正想要实现的是什么,你可能错误地模拟了这个问题吗?如果您期望多个错误,那么您可能应该通过Observable将这些错误作为数据发送,而不是作为异常条件。即在源头捕获异常并通过其IObserver<Exception>方法将其发送给OnNext