Rx中的IConnectableObservables

40
有人可以解释一下Observable和ConnectableObservable之间的区别吗? Rx扩展文档非常简略,我不理解在什么情况下使用ConnectableObservable是有用的。
这个类在Replay/Prune方法中被使用。
1个回答

65

简短回答:

IConnectableObservable代表一个待定的可共享的热观察者。调用IConnectableObservable.Connect()会使它变成热的(订阅冷源观察者)。

详细回答:

一个 冷观察者(例如,Observable.Range)对于每个订阅者都会重新播放整个序列,类似于秒表。每个订阅者都有自己的秒表,订阅时启动,观察结束时停止并重置。

一个热观察者可以在多个订阅者之间共享相同的序列。类似于只有一个秒表,所有订阅者都会看到相同的读数,不管他们何时开始观看。

IObservable.Publish将冷观察者转换为热观察者,但返回一个IConnectableObservable。这使得订阅者可以在开始前订阅(单个)秒表。调用IConnectableObservable.Connect()启动秒表,通过释放Connect()返回值来停止秒表。

值得注意的是,某些观察者源从本质上就是热的。例如,鼠标事件可能会在我们订阅它们之前就已经发生了。此时,连接的可观察对象所做的只是共享单个事件订阅。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接