3

嗨,我已经考虑了一段时间,如果您手动调用它的方法Subject<T>,则基于它处理所有订阅。Dispose但是我最近发现它不是这样工作的,它只是清除其内部的观察者集合并用 DisposedObserver 帮助类实例替换它。

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

  • 订阅者可能是部分依赖于主题的组合,因此完全传播处置没有意义。IE。正如每个人所期望的那样,合并不会仅仅因为其中一个来源被处置而被处置。
  • Subject.Dispose它在语义上等同于Observable.Never从观察者一侧的延续。如果想在处置前发出错误或完成信号(因为它们在同一范围内),Subject.Dispose 调用者也可以调用 OnComplete 或 OnError。

编辑注:对不起,不清楚的问题。我已经了解如何使用它,这更像是一个设计问题。让我更清楚地说明它。

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

(以上两点是我的答题试验)

4

1 回答 1

7

主题应通过发送 OnComplete 或可能的 OnError 来表明它已完成。这是惯用和语法正确的 Rx。订阅者有责任通过处置订阅来结束订阅。您应该编写 Observables,以便它们在“完成”后清理资源,即使订阅者没有取消订阅。

于 2013-05-14T15:42:06.657 回答