为了账号安全,请及时绑定邮箱和手机立即绑定

Mono#then 和 Mono#and 的区别?

Mono#then 和 Mono#and 的区别?

森林海 2022-11-30 16:40:54
给定以下单声道: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();具有相同的输出:sleepmono1mono2mono3在这种情况下Mono#then和之间有什么区别?Mono#and来自https://projectreactor.io/docs/core/release/reference/index.html#which-operator:[如果你]有一个序列但[你]对值不感兴趣并且[你]想在最后切换到另一个 Mono,[使用] Mono#then(mono)。[如果你]想通过协调他们从 1 Mono 和任何源到 Mono 的终止来合并发布者,[使用] Mono#and。#and不幸的是,这并不能帮助我找到一个#then行为不同的案例。
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

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

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

除此之外, withMono#then操作将按顺序执行,而 withMono#and不能保证顺序(至少从文档中是这样)。


查看完整回答
反对 回复 2022-11-30
  • 1 回答
  • 0 关注
  • 473 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号