代码之家  ›  专栏  ›  技术社区  ›  Ray Booysen

IConnectableObservables在Rx中

  •  38
  • Ray Booysen  · 技术社区  · 16 年前

    有人能解释可观察的和可连接的可观察的之间的区别吗?Rx扩展文档非常稀疏,我不知道ConnectableObservable在什么情况下有用。

    1 回复  |  直到 15 年前
        1
  •  63
  •   Richard Szalay    13 年前

    简短回答:

    IConnectableObservable 表示 悬而未决的 可与多个订户共享的热可观察的。打电话 IConnectableObservable.Connect() 导致变热(订阅冷源可观察)

    长话短说:

    A 冷可观察 (就像 Observable.Range )重播每个订阅服务器的序列。这对秒表来说是一个很好的选择,每个订户都有自己的秒表。订阅者通过订阅启动秒表,一旦观察者停止观察,秒表就会停止(并复位)。

    A 热可观测 在所有订阅服务器之间共享序列。有一块秒表,所有的订阅者都能得到相同的时间读数,不管他们是什么时候开始看的,这真是太棒了。

    IObservable.Publish 将冷可观测值转换为热可观测值,但返回 IConnectableObservable.Connect() Connect() 返回值停止秒表。

    值得注意的是,一些可观测的辐射源本质上是热的。例如,无论我们是否订阅了鼠标事件,都可以触发鼠标事件。在这个场景中,一个可连接的可观察对象所能做的就是共享一个事件订阅。