私はイベントをトリガーするObservable
を取るAPIを持っています。RxJavaの指数バックオフ
インターネット接続が検出された場合はdefaultDelay
秒ごとに値を送信し、接続がない場合はnumberOfFailedAttempts^2
回遅延させて返します。
私は私がいる最大の問題はretryWhen's
観測可能で、様々なスタイルの束を試してみたが一度だけ評価されています
Observable
.interval(defaultDelay,TimeUnit.MILLISECONDS)
.observeOn(Schedulers.io())
.repeatWhen((observable) ->
observable.concatMap(repeatObservable -> {
if(internetConnectionDetector.isInternetConnected()){
consecutiveRetries = 0;
return observable;
} else {
consecutiveRetries++;
int backoffDelay = (int)Math.pow(consecutiveRetries,2);
return observable.delay(backoffDelay, TimeUnit.SECONDS);
}
}).onBackpressureDrop())
.onBackpressureDrop();
は私がしようとしてる何をする方法はありますか?私は関連する質問を見つけましたが(今検索することはできません)、取られたアプローチは動的な価値を伴わないようです。
問題のサンプルはおそらく、私が使った2つのアプローチ(1つのタイマー+再試行ベース、1つのインターバル+遅延サブスクリプションベース)を混在させるようだから、試行錯誤の途中だったでしょう。リトライ/リピート可能な入力を再度使用する必要があります。その観察可能な原因を使用しても、サブスクリプションの漏れが問題にならないのですか? –
@AssortedTrailmixこれは第1レベルの入力についてのものであり、内部の「flatMap」に関するものではありません。この記事の最後の例は、非常によく似たパターンです。 –
オハイオ州参照してください、私は逃した申し訳ありませんが 'カウントは'フラットになっていたものだった –