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