Java Mono#then和Mono#and的区别是什么?
鉴于以下情况:Java Mono#then和Mono#and的区别是什么?,java,reactive-programming,project-reactor,Java,Reactive Programming,Project Reactor,鉴于以下情况: Mono mono1=Mono.fromRunnable(()->{ System.out.println(“sleep1”); 试一试{ 睡眠(1000); }捕捉(中断异常e){ 抛出新的非法状态异常(e); } System.out.println(“mono1”); }); Mono mono2=Mono.fromRunnable(()->{ System.out.println(“mono2”); }); Mono mono3=Mono.fromRunnable(()-
Mono mono1=Mono.fromRunnable(()->{
System.out.println(“sleep1”);
试一试{
睡眠(1000);
}捕捉(中断异常e){
抛出新的非法状态异常(e);
}
System.out.println(“mono1”);
});
Mono mono2=Mono.fromRunnable(()->{
System.out.println(“mono2”);
});
Mono mono3=Mono.fromRunnable(()->{
System.out.println(“mono3”);
});
两者:
mono1
.然后(2)
.然后(3)
.block();
以及:
mono1
.及(2)
.及(3)
.block();
具有相同的输出:
睡眠
mono1
mono2
mono3
在这种情况下和之间有什么区别
发件人: [如果您]有一个序列,但[您]对值不感兴趣,[您]想在最后切换到另一个单声道,[使用]
Mono,然后(Mono)
[如果您]希望通过将其从1个Mono和任何源的终止协调到一个Mono来合并发布者,[使用]Mono#和
这无助于我找到这样一种情况,即#和和#然后的行为很不幸会有所不同。Mono#和
只是“将当前Mono和另一个源的终止信号连接到返回的空Mono中”。它总是返回Mono
,并且只允许您协调两个Mono
s的终止
Mono#然后
允许将两个Mono
s链接在一起,最终结果将由作为参数传递的Mono
确定。从这个意义上说,Mono#然后
是Mono#flatMap
的一个更原始的版本,唯一的区别是在Mono#flatMap
的内部,您可以在一个链中访问上一个Mono
的结果,您可以将其转换为另一个Mono
实例
除此之外,使用Mono#则
操作将按顺序执行,而使用Mono#和
则无法保证订购(至少从文档中)