通过使用
.publish()
,请
fluxSrc
变成热通量。考虑:
另一方面,热门出版商不依赖于
订户。他们可能会马上开始发布数据
每当新的订阅服务器出现时(在这种情况下
所述用户将只看到在其之后发出的新元素
已订阅)。对于热门出版商来说,以前确实发生过一些事情
你订阅。
(
https://projectreactor.io/docs/core/release/reference/#reactor.hotCold
)
解决它的一个方法是摆脱
publish
在冷流中操作。另一个是改变
.autoConnect(2);
到
.autoConnect(3);
-这是因为您希望在第三次订阅时开始处理数据-
Mono.when(fluxA, monoB).block();
已到达(前一个是
fluxA.subscribe
和
monoB.subscribe
)。
编辑
以下内容:
When
确实等待源完成,但它从以前的子脚本收到了一个完整的信号。
可能发生的是:
-
通量A由
fluxA.subscribe(System.out::println);
,发出11并打印。
-
通量B由
monoB.subscribe(System.out::println);
开始减产。
-
Mono.when
被订阅(触发“多播”——通量被第二次订阅)。
-
开始减量,结果是21。
-
另一个减少开始,并立即完成结果20(减少空流-来自FluxSRC的仅项目已被另一个减少消耗)。
-
Flux A向两个子用户发送了OnComplete。
-
通量B发送到一个完整的还原结果=20。它被传递到订阅
单声道。
这就是为什么它没有被打印出来。
-
两个通量都从mono.when subscription发送到complete,因此
After
已打印。
-
大约在那时,第一次还原完成,值21传递给
monob.subscribe(系统输出::println);