Rx java flatMap()可观察对象上的调度程序是否影响外部可观察对象上的调度程序?

Rx java flatMap()可观察对象上的调度程序是否影响外部可观察对象上的调度程序?,rx-java,rx-java2,Rx Java,Rx Java2,这似乎是一个有点愚蠢的问题,我已经做了一些测试,看看它在实践中是如何工作的,但我希望看到它得到确认,如果可能的话,我想知道为什么在可观察合同及其实施方面,因为这感觉像是我对Rx规则理解中的一个严重漏洞。另外,如果你能告诉我在哪里可以找到这个,那么它将帮助我自己在将来回答这些问题 如果我使用以下可观察值: Observable.range(0, 3) .observeOn(schedulerA) .flatMap(i -> Observable.jus

这似乎是一个有点愚蠢的问题,我已经做了一些测试,看看它在实践中是如何工作的,但我希望看到它得到确认,如果可能的话,我想知道为什么在可观察合同及其实施方面,因为这感觉像是我对Rx规则理解中的一个严重漏洞。另外,如果你能告诉我在哪里可以找到这个,那么它将帮助我自己在将来回答这些问题

如果我使用以下可观察值:

Observable.range(0, 3)
          .observeOn(schedulerA)
          .flatMap(i -> Observable.just(i)
                                  .observeOn(schedulerB)
                                  .map(j -> -j))
          .doOnNext(i -> System.out.println(String.format("Got %d", i)))
          .subscribe()
那么操作符
.doOnNext(i->System.out.println(String.format(“Got%d”,i))
是否会在
schedulerA
schedulerB
上执行,原因是否有正式的或基于规范的原因


谢谢。

不保证在哪个调度程序
doOnNext
上运行。以概率的方式,它可能是其中的一个

原因是
flatMap
操作符使用了一种高级的快速路径和工作窃取算法,该算法可由任一线程触发,并将执行另一个线程的某些任务

随着琐碎的内部
可观察的
很快结束,可能
schedulerA
仍在处理其订阅,并检测到来自内部源的值可用,从而在同一
schedulerA
线程上发出该值。其他时候,
schedulerA
在生成项目之前完成内部
Observable
的处理。在这种情况下,
schedulerB
将触发
flatMap
内的发射


一般来说,当你不确定哪个线程将处理你的
doOnNext
时,总是在它之前使用所需的调度程序应用一个
observeOn

哦,天哪,所以当我记得在这两个线程上都看到它时,我没有想象到它。这让人放心。谢谢