0

私はかなり基本的な質問であると信じていることにしばらく苦労してきました。

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 が request() に正しく応答する必要があります <...> そのようなサポートは、オブザーバブルの要件ではありません

このようなサポートが原則としてどのように達成されるかについては、詳細には触れません。

Observableそのような/を実装するための一般的なパターンはありFlowableますか? 良い例や参照が見つかりませんでした。私が考えることができる1つの悪いオプションは、whileループ内emitter.requested() == 0でロックしdoOnRequest()、別のスレッドからロックを解除するモニターを持つことです。しかし、このアプローチは面倒に感じます。

では、この「スローダウン」は一般的にどのように達成されるのでしょうか?

ありがとう。

4

1 に答える 1