ネットワーク呼び出しに対して一種の指数バックオフを作成したいと考えています。ただし、通常のバックオフ間隔の代わりに、ネットワーク呼び出しの結果に関係なく、ネットワーク呼び出しを数回 (遅延を増やしながら) 繰り返してから完了する必要があります。
たとえば、デフォルトのケースは次のようになります。
→ wait 1s → network call → onNext(result)
→ wait 3s → network call → onNext(result)
→ wait 10s → network call → onNext(result)
→ onCompleted
一部のネットワーク呼び出しでエラーが発生した場合、これらのエラーはログに記録されますが、タスク自体は中止されません。2 番目のネットワーク呼び出しにエラーがあるとします。その場合、次のようになります。
→ wait 1s → network call → onNext(result)
→ wait 3s → network call error → log error
→ wait 10s → network call → onNext(result)
→ onCompleted
そして、すべての呼び出しにエラーがある場合:
→ wait 1s → network call error → log error
→ wait 3s → network call error → log error
→ wait 10s → network call error → log error
→ onCompleted
コードが次のようなネットワークを呼び出すことができる Observable が既にあります。
public Observable<Stuff> loadStuff() {
Request request = new Request.Builder()
.url("http://example.com/stuff").build();
return myCall(request, Stuff.class);
}
public <T> Observable<T> myCall(Request request, Class<T> resultClass) {
// calls OkHttp3 and parses the result
return okhttp(request)
.flatMap(parseResponse(resultClass));
}
loadStuff()
Observable を繰り返し使用して目的のバックオフ間隔を達成するにはどうすればよいですか?