40

有人可以解释 Observable 和 ConnectableObservable 之间的区别吗?Rx Extensions 文档非常稀少,我不明白 ConnectableObservable 在什么情况下有用。

此类用于重播/修剪方法。

4

1 回答 1

64

简短的回答:

IConnectableObservable表示可以与多个订阅者共享的待处理的热可观察对象。调用IConnectableObservable.Connect()导致更改为热(订阅冷源 observable)

长答案:

一个冷的 observable (like Observable.Range) 为每个订阅者重放序列。它类似于秒表,每个订阅者都有自己的秒表。订阅者通过订阅启动秒表,一旦观察者停止观察,秒表就会停止(并重置)。

hot observable在所有订阅者之间共享序列。这类似于有一个秒表,并且所有订阅者都获得相同的时间读数,无论他们何时开始观看。

IObservable.Publish将冷可观察对象转换为热可观察对象,但返回IConnectableObservable. 这使订阅者能够在(单个)秒表开始之前订阅它。呼叫IConnectableObservable.Connect()启动秒表。处理Connect()返回值会停止秒表。

值得注意的是,一些可观察到的来源本质上是热的。例如,鼠标事件可以触发,无论我们是否订阅它们。在这种情况下,可连接的 observable 所做的只是共享单个事件订阅。

于 2010-05-20T08:59:43.883 回答