【问题标题】:Why does .share() have no effect on cold sources (autoconnect vs. refCount)?为什么 .share() 对冷源没有影响(自动连接与 refCount)?
【发布时间】:2018-05-25 11:55:51
【问题描述】:
Flux<Integer> shared = Flux.just(1, 2).share();

shared.subscribe(System.out::println);
shared.subscribe(System.out::println);

由于share() 将通量变为热门,我希望第一个订阅者获得所有值,而第二个订阅者没有获得任何值,因为在订阅时流已经完成。但是输出和没有share一样:1 2 1 2,但应该只是1 2

当我将 share() 替换为 publish.autoconnect() 时,它按预期工作。这是为什么呢?

【问题讨论】:

    标签: project-reactor


    【解决方案1】:

    答案很简单,但我花了一段时间才弄明白。

    share()publish().refCount() 的快捷方式。 refCount()autoConnect() 类似,除了一项附加功能:当所有订阅者都取消或 - 这就是这里的情况 - 流已完成时,它会断开连接。

    第一个 shared.subscribe 创建对原始通量的订阅(通过 share)。所有值都会立即发出,流完成,订阅被取消。

    由于现在没有订阅,第二个shared.subscribe 再次创建订阅,流从头开始重新开始。

    autoConnect 但是,不会取消订阅。如果您使用它而不是 refCount,则对原始通量的订阅仍然存在,但由于流已完成,任何其他订阅者都不会收到任何值。

    【讨论】:

      猜你喜欢
      • 2014-07-02
      • 2021-08-11
      • 1970-01-01
      • 2016-10-24
      • 2016-08-19
      • 2013-01-18
      • 2019-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多