2

是否可以设计一个 Rx 运算符以相同的顺序吞下重复的异常(与 Retry 或 Catch 不同)?本质上与 .Select(x => x) 相同,但忽略了沿途的异常。(我知道这违反了指导方针)。

4

2 回答 2

6

最简洁的答案是不”。

稍微不那么简短的答案是你的前提是有缺陷的。这是因为您不能让 Observable 抛出一个以上的错误,并且您假设的操作员将是 Observer。根据定义,观察者不应影响可观察对象(只是不要告诉海森堡我说过)。

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

不要让它那样做。:) Rx 无论如何都会很好地防止这种情况发生。Subject<T>,例如,只是不会在第一个 OnError 之后发布。

于 2013-05-29T21:38:27.940 回答
2

所有的 Rx 操作符都遵循指南(他们保证你只会收到一个错误,然后 observable 就会完成)。因此,任何通过 Reactive 库创建的 observable 都不会被诱使允许多个错误通过。

您需要编写自己的自定义实现IObservable<T>和您自己的自定义运算符(不使用任何反应式运算符)来实现您想要的。

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

于 2013-05-29T21:25:04.987 回答