AnonymousSafeObservable的目的是什么?它是何时创建的/为什么创建的



我正在使用Where谓词和ObservableExtensions.Subscribe(this, Action<T>)方法订阅Observable

当订阅Action中引发异常时,我可以在堆栈上看到一个名为AnonymousSafeObserver的类,这似乎是导致在订阅Action中发生异常后处理我的底层Observable的原因。

这不是我所期望的行为,也不是我以前在其他订阅中看到的行为,通常异常刚刚传递给OnNext的调用方(即可观察的)。

这种阶级/行为是在什么情况下引入的?

您不能总是依赖于它们是从观测器中的异常一直返回到订阅者的OnNext调用的路径。任何引入异步性的东西都会破坏该链(DelayObserveOnCombineLatest等)。

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

我的理解是,只要你订阅了一个可观察的内容,就会创建其中一个。Rx对可观察器进行的内部订阅将不会使用此类,因为它们已经保证其内部观察器实现永远不会抛出异常。但由于他们将外部观察者(即你的观察者和我的观察者)视为不受信任的,因此将它们封装在其中一个对象中。

相关内容

  • 没有找到相关文章

最新更新