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

RxJava:如何同时执行多个Maybe任务?

RxJava Maybe.merge 并行执行实现方案

你遇到的问题核心是:Maybe.merge 默认会按顺序订阅各个源 Maybe,若任务未指定异步调度器,就会在当前线程串行执行。要让三个任务同时触发,只需给每个 Maybe 任务指定独立的后台线程执行:

修正后的代码

return Maybe.merge(
    aOneSecondTask().subscribeOn(Schedulers.io()),
    aFiveSecondTask().subscribeOn(Schedulers.io()),
    aTenSecondTask().subscribeOn(Schedulers.io())
).firstElement();

核心要点

  • subscribeOn(Schedulers.io()) 的作用:将每个 Maybe 的任务执行逻辑切换到 IO 线程池的独立线程中,确保三个任务并行启动。
  • 区分 subscribeOn 和 observeOn:前者控制任务执行的线程,后者仅影响下游回调的线程,这里必须用 subscribeOn 来改变任务执行的线程环境。
  • 阻塞型任务必须异步化:你的任务用 Thread.sleep 模拟阻塞操作,必须脱离当前线程执行,否则不仅会串行,还可能阻塞调用线程。

修改后,三个任务会同时开始执行,总耗时由最长的 10 秒任务决定,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:06:25