我想要做的是让Flowable带有一个项目的反压缓冲器,以保留从流中产生的最新项目。
我尝试使用Flowable.onBackpressureBuffer(1,()-> {},BackpressureOverflowStrategy.DROP_OLDEST)。但是,它不符合我的预期
Flowable.range(0, 10_000)
.onBackpressureBuffer(1, {}, BackpressureOverflowStrategy.DROP_OLDEST)
.observeOn(Schedulers.computation())
.subscribe {
println(it)
Thread.sleep(5)
}
我期望的输出是整数序列,不一定是连续的,应该包括最后一项9,999。但是,它只打印前几个连续的数字,例如0、1、2、3、4 ...,但每次都不同,而没有打印最后一个数字9,999。
答案 0 :(得分:1)
我正在使用以下代码,并且始终始终在最后打印9999。它首先打印连续的数字(直到127),然后再打印9999。在您的情况下,也许主执行线程结束的时间比处理打印号码的线程早得多。为了打印直到9999的所有数字,我尝试将反压缓冲区更改为10000(并且主线程睡眠设置为更高的值),这显然确保了所有数字都被打印,因为缓冲区很大。
public class FlowableTest {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
Flowable.range(0, 10_000).onBackpressureBuffer(1, () -> {
}, BackpressureOverflowStrategy.DROP_OLDEST).observeOn(Schedulers.computation()).subscribe(it -> {
System.out.println(it);
Thread.sleep(5);
});
Thread.sleep(50000); // wait the main program sufficient time to let the other threads end
}