System.reactive 匿名安全可观察的目的是什么,何时/为什么创建?

System.reactive 匿名安全可观察的目的是什么,何时/为什么创建?,system.reactive,System.reactive,我使用Where谓词和observeExtensions.Subscribe(this,Action)方法订阅observeable 当订阅操作中抛出异常时我可以在堆栈上看到一个名为匿名安全观察者的类,这似乎是导致在订阅操作中异常后处理我的基础可观察的原因 这不是我预期的行为,也不是我以前在其他订阅中看到过的行为,通常异常只是传递给OnNext的调用者(即可观察对象) 在什么情况下引入此类/行为?您不能总是依赖于它们是从观察者中的异常一直返回到订阅者的OnNext调用的路径。任何引入异步性的东西

我使用
Where
谓词和
observeExtensions.Subscribe(this,Action)
方法订阅
observeable

当订阅
操作中抛出异常时
我可以在堆栈上看到一个名为
匿名安全观察者
的类,这似乎是导致在订阅
操作
中异常后处理我的基础
可观察
的原因

这不是我预期的行为,也不是我以前在其他订阅中看到过的行为,通常异常只是传递给
OnNext
的调用者(即可观察对象)


在什么情况下引入此类/行为?

您不能总是依赖于它们是从观察者中的异常一直返回到订阅者的
OnNext
调用的路径。任何引入异步性的东西都会打破这个链条(
Delay
ObserveOn
combinelateest
,等等)

无论如何,如果您的观察者的
OnNext
处理程序抛出异常,那么Rx将假定您的观察者的状态已损坏
AnonymousSafeObserver
仅确保观察者从可观察对象中取消订阅,以避免内存泄漏,并避免继续向损坏的观察者发送更多可能弊大于利的事件。这是一种快速失败的哲学

我的理解是,任何时候你订阅一个可观察到的,其中一个都会被创建。Rx对Observable进行的内部订阅不会使用该类,因为它们已经保证其内部observer实现不会抛出异常。但是,因为他们将外部观察者(即您的观察者和我的观察者)视为不可信的,所以将它们包装在这些对象中