【发布时间】:2017-12-01 09:01:59
【问题描述】:
我想用 rxjava2 实现简单的生产者-消费者模型,当下游请求一个,上游发出一个。
我知道flatMap 或observeOn 的默认缓冲区大小为128,所以我将缓冲区大小设置为1,但它也不起作用。
Flowable.defer((Callable<Publisher<Integer>>) () -> Flowable.range(1, 5))
.flatMap((Function<Integer, Publisher<Integer>>) integer -> {
//do something with long time.
System.out.println("flatMap:" + integer);
return Flowable.just(integer);
}, false, 1) //=====> 1
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation(), false, 1) //=====> 2
.subscribe(new Subscriber<Integer>() {
@Override
public void onSubscribe(Subscription s) {
//request one
s.request(1);
}
@Override
public void onNext(Integer integer) {
System.out.println("onNext:" + integer);
}
@Override
public void onError(Throwable t) {
}
@Override
public void onComplete() {
}
});
实际输出:
flatMap:1
flatMap:2
onNext:1
flatMap:3
预期的输出,因为我只调用了一次s.request(1):
flatMap:1
onNext:1
【问题讨论】:
标签: rx-java rx-android rx-java2