嗨,我已经考虑了一段时间,如果您手动调用它的方法Subject<T>
,则基于它处理所有订阅。Dispose
但是我最近发现它不是这样工作的,它只是清除其内部的观察者集合并用 DisposedObserver 帮助类实例替换它。
我发现自己对这种行为有点困惑,只是假设“正常”只是传播和处置所有订阅者。后来,试图弄清楚为什么要这样设计,我猜到了他们这样设计的几个原因。
- 订阅者可能是部分依赖于主题的组合,因此完全传播处置没有意义。IE。正如每个人所期望的那样,合并不会仅仅因为其中一个来源被处置而被处置。
Subject.Dispose
它在语义上等同于Observable.Never
从观察者一侧的延续。如果想在处置前发出错误或完成信号(因为它们在同一范围内),Subject.Dispose 调用者也可以调用 OnComplete 或 OnError。
编辑注:对不起,不清楚的问题。我已经了解如何使用它,这更像是一个设计问题。让我更清楚地说明它。
为什么你认为 Rx 的设计者会这样设计 Dispose 行为?
(以上两点是我的答题试验)