You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何先顺序执行resultAMono,再并行执行依赖其结果的resultBMono和resultCMono?

问题解决:Reactor 中顺序+并行执行的正确实现

原代码存在两个核心问题:

  • 使用block()会阻塞线程,违背Reactor异步非阻塞的设计原则
  • 无法实现「先执行resultAMono,再并行执行resultBMono与resultCMono」的需求

正确实现代码

Mono<List<String>> resultAMono = listA();

// 先执行resultAMono,获取结果后并行启动loadB和loadC
Mono<Void> finalResult = resultAMono.flatMap(resultA -> {
    Mono<Void> resultBMono = loadB(resultA);
    Mono<Void> resultCMono = loadC();
    // 并行等待两个Mono执行完成
    return Mono.when(resultBMono, resultCMono);
});

逻辑说明

  • 顺序执行保障:flatMap操作符会先订阅resultAMono,只有当它成功返回结果后,才会执行后续创建并启动resultBMono和resultCMono的逻辑,确保resultAMono执行在前
  • 并行执行实现:在flatMap内部同时初始化resultBMono和resultCMono,通过Mono.when()让两者并行执行,直到两个任务都完成,最终返回的Mono<Void>会在所有任务结束时触发完成信号
  • 避免阻塞:全程使用Reactor的异步操作符,没有调用block(),完全遵循非阻塞设计

内容的提问来源于stack exchange,提问作者Aymen Kanzari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 14:52:50