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