gpt4 book ai didi

project-reactor - 为什么 .share() 对冷源没有影响(自动连接与 refCount)?

转载 作者:行者123 更新时间:2023-12-01 22:07:46 25 4
gpt4 key购买 nike

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() 时,它按预期工作。这是为什么?

最佳答案

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

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

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

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

但是,

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

关于project-reactor - 为什么 .share() 对冷源没有影响(自动连接与 refCount)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50528668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com