私はかなり基本的な質問であると私はしばらくの間苦労してきました。観測可能なサポートレスキュープル
私はFlowable
を持っています。これは、ネットワークからアイテムの束を取り出し、それらを放出します。
Flowable
.create(new FlowableOnSubscribe<Item>() {
@Override
public void subscribe(FlowableEmitter<Item> emitter) throws Exception {
Item item = retrieveNext();
while (item != null) {
emitter.onNext(item);
if (item.isLast) {
break;
}
item = retrieveNext();
}
emitter.onComplete();
}
}, BackpressureStrategy.BUFFER)
.doOnRequest(new LongConsumer() {
@Override
public void accept(long t) throws Exception {
// ...
}
});
リクエストごとに処理する必要があります。つまり、私はSubscription
を保有し、必要に応じてsubscription.request(n)
と呼んでいます。
Backpressure(「リアクティブプル」セクション)の記事はObserver
の視点を記述するだけで簡単に正しく[反応プル]が機能するためには
が、しかし、観測A及びBは に応答しなければならないことに言及しますリクエスト()< ...>そのようなサポートは、それは、そのようなサポートは原則的に達成することができる方法に関する詳細には触れません 観測
の要件ではありません。
このような実装には共通のパターンがありますかObservable
/Flowable
?私は良い例や参考資料を見つけられませんでした。私が考えることができる1つの貧弱なオプションは、私がループの中でロックするモニターを持つことです。emitter.requested() == 0
と別のスレッドからdoOnRequest()
のロックを解除するとループします。しかし、このアプローチはちょっと面倒です。
この「減速」は一般にどのように達成されますか?
ありがとうございました。
明確にするために、2.xの演算子は[wiki](https://github.com/ReactiveX/RxJava/wiki/Writing-operators-for-2.0)に記述されています。 – akarnokd