亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 403 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號