Rx java 如何在Rxjava2中获得关于背压的实际最新事件?Flowable.onBackpressureLatest()未按预期工作
当生产商生产事件的速度快于客户消费时 我认为使用with可以获得最新的事件 但结果是有一个默认的大小为128的缓冲区。我得到的是之前缓冲过的日期事件 那么,我如何才能获得最新的实际事件 以下是示例代码:Rx java 如何在Rxjava2中获得关于背压的实际最新事件?Flowable.onBackpressureLatest()未按预期工作,rx-java,rx-java2,backpressure,Rx Java,Rx Java2,Backpressure,当生产商生产事件的速度快于客户消费时 我认为使用with可以获得最新的事件 但结果是有一个默认的大小为128的缓冲区。我得到的是之前缓冲过的日期事件 那么,我如何才能获得最新的实际事件 以下是示例代码: Flowable.interval(40, TimeUnit.MILLISECONDS) .doOnNext{ println("doOnNext $it") } .onBackpressur
Flowable.interval(40, TimeUnit.MILLISECONDS)
.doOnNext{
println("doOnNext $it")
}
.onBackpressureLatest()
.observeOn(Schedulers.single())
.subscribe {
println("subscribe $it")
Thread.sleep(100)
}
我所期望的是:
doOnNext 0
subscribe 0
doOnNext 1
doOnNext 2
subscribe 2
doOnNext 3
doOnNext 4
doOnNext 5
subscribe 5
doOnNext 6
doOnNext 7
subscribe 7
doOnNext 8
doOnNext 9
doOnNext 10
subscribe 10
...
我得到的是:
doOnNext 0
subscribe 0
doOnNext 1
doOnNext 2
subscribe 1
doOnNext 3
doOnNext 4
doOnNext 5
subscribe 2
doOnNext 6
doOnNext 7
subscribe 3
doOnNext 8
doOnNext 9
doOnNext 10
subscribe 4
...
doOnNext 325
subscribe 127
doOnNext 326
doOnNext 327
doOnNext 328
subscribe 246
...
您的问题实际上在于observeOn,它默认请求最多128个项目,并将此请求传递给backpressureLatest,因此它的行为不符合您的预期
您可以使用指定缓冲区大小,该大小将修复您看到的行为。您的问题实际上在于observeOn,默认情况下,observeOn最多请求128个项目,并将此请求传递给backpressureLatest,因此它的行为不符合您的预期
您可以使用指定缓冲区大小,该大小将修复您看到的行为。请注意,即使observeOn的最小值为1,onBackpressureLatest仍有大小为1的缓冲区。由于observeOn必须跨线程边界移动数据,因此可以说,当一个发射在管道中时,您将处理一个发射。请注意,即使observeOn的最小值为1,OnBackPressureRelatest仍有大小为1的缓冲区。因为observeOn必须跨线程边界移动数据,所以可以说,当一个发射在管道中时,您将有一个发射正在被处理。