您好我一直在考虑Subject<T>
如果您手动调用Dispose
方法,Subject.Dispose
会根据它处理所有订阅。但是我最近发现它不起作用,只是清除它的内部观察者集合并用DisposedObserver帮助器类实例替换它。
我发现自己对行为有点困惑,只是假设“正常”只会传播并处置所有的嫌疑人。后来,试图弄清楚为什么这样设计,我猜想他们为什么这样设计的原因。
Observable.Never
它在语义上等同于观察者一侧的{{1}}延续。如果想要在处理之前发出错误或完成信号,则Subject.Dispose调用者也可以调用OnComplete或OnError(因为它们在同一范围内)。编辑注意: 对不起的问题很抱歉。我已经明白了如何使用它,这更像是一个设计问题。让我更清楚地说明一下。
为什么你认为Rx的设计者以这种方式制作Dispose行为?
(以上两点是我的回答试验)
答案 0 :(得分:6)
主题应通过发送OnComplete或可能的OnError来指示它已完成。这是惯用的和语法正确的Rx。订阅者有责任通过处置它们来结束订阅。您应该编写Observables,以便他们在“完成”后清理资源,即使订阅者没有取消订阅。