2013-07-29 44 views
0

我正在使用Where謂詞和ObservableExtensions.Subscribe(this, Action<T>)方法訂閱ObservableAnonymousSafeObservable的目的是什麼以及何時/爲什麼創建它?

當一個異常的訂閱Action我可以看到一個名爲AnonymousSafeObserver堆棧上的類被拋出,這似乎是負責使處置我的訂閱Action異常後根本Observable的。

這不是我期望的行爲,也不是我以前見過的其他訂閱的行爲,通常情況下,異常已傳遞給調用者OnNext(即observable)。

在什麼情況下引入了這個類/行爲?

回答

0

你不能總是依靠他們作爲觀察者中的異常路徑回到用戶的OnNext呼叫。任何引入異步性的東西都會破壞該鏈(DelayObserveOnCombineLatest等)。

無論如何,如果您的觀察者的OnNext處理程序拋出異常,那麼Rx會假設您的觀察者狀態已損壞。 AnonymousSafeObserver僅僅確保觀察者在這種情況下退出觀察,以避免內存泄漏,並避免繼續發送更多的事件給損壞的觀察者,這可能會造成更多的傷害而不是好的。這是一個失敗的快速哲學。

我的理解是,無論您何時訂閱可觀察的其中一個,都將被創建。 Rx向observables發出的內部訂閱不會使用這個類,因爲他們已經保證他們的內部觀察者實現不會拋出異常。但是因爲他們把外部觀察者(即你的觀察者和我的觀察者)視爲不可信的東西,所以把它們包裝在這些對象之一中。

相關問題