在Rx中的IConnectableObservables

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

这个类用在Replay / Prune方法中。

简短的回答:

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

很长的回答:

冷观察 (如Observable.Range )重播每个用户的序列。 秒表,每个用户都有自己的秒表。 用户通过订阅来启动秒表,并且一旦观察者停止观察,秒表停止(并复位)。

一个热点观察者共享所有用户之间的序列。 不pipe什么时候开始观看,秒表都是一样的,所有的用户都可以同时读出。

IObservable.Publish将冷观察转换为热观察,但返回IConnectableObservable 。 这使用户能够在开始之前订阅(单个)秒表。 调用IConnectableObservable.Connect()启动秒表。 处理Connect()返回值将停止秒表。

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