Rx java 如何在Rxjava2中获得关于背压的实际最新事件?Flowable.onBackpressureLatest()未按预期工作

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

当生产商生产事件的速度快于客户消费时

我认为使用with可以获得最新的事件

但结果是有一个默认的大小为128的缓冲区。我得到的是之前缓冲过的日期事件

那么,我如何才能获得最新的实际事件

以下是示例代码:

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必须跨线程边界移动数据,所以可以说,当一个发射在管道中时,您将有一个发射正在被处理。