2013-07-29 42 views
0

我正在使用Where谓词和ObservableExtensions.Subscribe(this, Action<T>)方法订阅ObservableAnonymousSafeObservable的目的是什么以及何时/为什么创建它?

当一个异常的订阅Action我可以看到一个名为AnonymousSafeObserver堆栈上的类被抛出,这似乎是负责使处置我的订阅Action异常后根本Observable的。

这不是我期望的行为,也不是我以前见过的其他订阅的行为,通常情况下,异常已传递给调用者OnNext(即observable)。

在什么情况下引入了这个类/行为?

回答

0

你不能总是依靠他们作为观察者中的异常路径回到用户的OnNext呼叫。任何引入异步性的东西都会破坏该链(DelayObserveOnCombineLatest等)。

无论如何,如果您的观察者的OnNext处理程序抛出异常,那么Rx会假设您的观察者状态已损坏。 AnonymousSafeObserver仅仅确保观察者在这种情况下退出观察,以避免内存泄漏,并避免继续发送更多的事件给损坏的观察者,这可能会造成更多的伤害而不是好的。这是一个失败的快速哲学。

我的理解是,无论您何时订阅可观察的其中一个,都将被创建。 Rx向observables发出的内部订阅不会使用这个类,因为他们已经保证他们的内部观察者实现不会抛出异常。但是因为他们把外部观察者(即你的观察者和我的观察者)视为不可信的东西,所以把它们包装在这些对象之一中。

相关问题