2
嗨我一直在想一段時間Subject<T>
處置所有基於它的訂閱,如果你手動調用它的Dispose
方法。但是我最近發現它不能這樣工作,它只是清除它的內部觀察者集合,並用DisposedObserver輔助類實例替換它。爲什麼主題<T> .Dispose爲什麼不處理當前訂閱?
我發現自己對行爲有點困惑,只是假設「正常」只會傳播和處理所有的用戶。後來,試圖找出爲什麼這樣設計,我猜想了他們爲什麼這樣設計的幾個原因。
- 審稿人可能是一個組成部分依賴於主題,所以處置的完全傳播沒有意義。即。正如大家所期待的那樣,合併不僅僅是因爲其中一個來源被處置掉了。
Subject.Dispose
它在語義上等同於從觀察者側面延續Observable.Never
。 Subject.Dispose調用者也可以調用OnComplete或OnError,如果想要在處理前發出錯誤或完成信號(因爲它們在相同範圍內)。
編輯提示: 對不清楚的問題。我已經瞭解如何使用它,這更像是一個設計問題。讓我更清楚地陳述它。
爲什麼您認爲Rx的設計者使Dispose行爲如此呢?
(以上兩點是我的回答試行)
你應該添加你的答案作爲答案,而不是把它們放在問題中。 – 2013-05-14 17:08:49
更有趣的問題(至少對我來說)是爲什麼他們甚至提出了「IDisposable」主題。 – Brandon 2013-05-14 21:03:12
這是一個很好的問題 - 據我所知,Rx本身並沒有使用它。 – 2013-05-14 22:07:58