如何先顺序执行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
相关产品推荐
相关产品推荐

