gpt4 book ai didi

java - Mono#then 和 Mono#and 的区别?

转载 作者:行者123 更新时间:2023-11-30 10:03:51 25 4
gpt4 key购买 nike

给定以下单声道:

Mono<Void> mono1 = Mono.fromRunnable(() -> {
System.out.println("sleep1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new IllegalStateException(e);
}
System.out.println("mono1");
});
Mono<Void> mono2 = Mono.fromRunnable(() -> {
System.out.println("mono2");
});
Mono<Void> mono3 = Mono.fromRunnable(() -> {
System.out.println("mono3");
});

两者:

mono1
.then(mono2)
.then(mono3)
.block();

和:

mono1
.and(mono2)
.and(mono3)
.block();

具有相同的输出:

sleep
mono1
mono2
mono3

Mono#then 之间有什么区别?和 Mono#and在这种情况下?


来自 https://projectreactor.io/docs/core/release/reference/index.html#which-operator :

[If you] have a sequence but [you are] not interested in values and [you] want to switch to another Mono at the end, [use] Mono#then(mono).

[If you] want to combine publishers by coordinating their termination from 1 Mono and any source into a Mono, [use] Mono#and.

不幸的是,这并不能帮助我找到 #and#then 行为不同的情况。

最佳答案

Mono#and只是“将来自当前单声道和另一个源的终止信号加入到返回的无效单声道中”。它总是返回 Mono<Void>并且只允许您协调两个 Mono 的终止

Mono#then让你链接两个 Mono s在一起,最终结果将由Mono决定。作为参数传递。从这个意义上说,Mono#thenMono#flatMap 的更原始版本, 唯一的区别是 Mono#flatMap 的内部您可以访问前一个 Mono 的结果在一条链中,您可以将其转换为另一个 Mono实例。

除此之外,Mono#then这些操作将按顺序执行,而使用 Mono#and不保证一定会订购(至少从文档中是这样)。

关于java - Mono#then 和 Mono#and 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56184549/

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