2010-05-14 59 views
37

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

这个类用于Replay/Prune方法。

回答

60

短的答案:

IConnectableObservable表示未决热可观察到的,可与多个订户共享。调用IConnectableObservable.Connect()导致改变热(订阅了冷源可观察)

龙答:

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

A 热可观察共享所有订户之间的序列。无论何时开始观看,只有一个秒表,所有用户都可以获得同样的时间读数。

IObservable.Publish将冷观察转换为热观察,但返回IConnectableObservable。这使用户可以在开始之前预订(单个)秒表。拨打IConnectableObservable.Connect()开始秒表。处理返回值Connect()会停止秒表。

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