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
相关产品推荐
相关产品推荐

