Flux<Integer> shared = Flux.just(1, 2).share();
shared.subscribe(System.out::println);
shared.subscribe(System.out::println);
Run Code Online (Sandbox Code Playgroud)
由于share()将通量变成热通量,我希望第一个订阅者获得所有值,而第二个订阅者则得不到任何值,因为流在订阅时已完成。share但输出与没有:相同1 2 1 2,但它应该只是1 2.
当我替换share()它时publish.autoconnect(),它会按预期工作。这是为什么?
答案很简单,但我花了一段时间才弄清楚。
share()是 的快捷方式publish().refCount()。refCount()除了一项附加功能之外,它就像其他功能一样autoConnect():当所有订阅者都取消时,它会断开连接,或者 - 这就是这里的情况 - 流已完成。
第一个创建对原始通量的shared.subscribe订阅(通过)。share所有值都会立即发出,流完成,订阅被取消。
由于现在没有订阅,第二个shared.subscribe再次创建订阅,并且流再次从头开始。
autoConnect但是,并不会取消订阅。如果您使用它而不是refCount保留对原始通量的订阅,但由于流已完成,任何其他订阅者都不会收到任何值。
| 归档时间: |
|
| 查看次数: |
683 次 |
| 最近记录: |