为什么主题<T>。处置不处置当前订阅?



嗨,我一直在想,如果您手动调用其Dispose方法,Subject<T>将基于它处置所有订阅。但是我最近发现它不是这样工作的,它只是清除它的内部观察者集合,并用一个DisposedObserver helper类实例代替它。

我发现自己对这种行为有点困惑,只是假设"正常"将只是传播并处理所有订阅者。后来,我试图弄清楚为什么这样设计,我猜出了他们这样设计的几个原因。

  • 订阅者可能是一个部分依赖于主题的组合,因此完全传播处置是没有意义的。ie。合并不会像每个人期望的那样,仅仅因为其中一个源被处理就被处理。
  • Subject.Dispose从观察者的角度,语义上等同于与Observable.Never的延续。这个话题。处置调用者也可以调用OnComplete或OnError,如果想在处置之前发出错误或完成的信号(因为它们在相同的作用域上)。

编辑注:抱歉我的问题不清楚。我已经知道如何使用它,这更多的是一个设计问题。让我说得更清楚些。

你认为为什么Rx的设计者会这样做?

(以上两点是我的试答)

主题应该通过发送OnComplete或可能的OnError来指示它是完成的。这是习惯上和语法上正确的Rx。订阅者负责通过处置订阅来结束订阅。你应该这样写Observables:一旦资源"完成",即使订阅者没有取消订阅,它们也会清理资源。

相关内容

  • 没有找到相关文章