rxjava: Могу ли я использовать retry (), но с задержкой?

Я использую rxjava в своем приложении для Android для асинхронной обработки сетевых запросов. Теперь я хотел бы повторить неудачный сетевой запрос только по истечении определенного времени.

Есть ли способ использовать retry () в Observable, но повторять только после определенной задержки?

Есть ли способ сообщить Observable о том, что в настоящее время проводится повторная попытка (в отличие от первой попытки)?

Я посмотрел на debounce () / throttleWithTimeout (), но они, кажется, делают что-то другое.

Редактировать:

Я думаю, что нашел один способ сделать это, но мне было бы интересно либо подтверждение того, что это правильный путь, либо другие, более эффективные способы.

Что я делаю, так это: в методе call () моего Observable.OnSubscribe перед вызовом метода onError () подписчиков я просто оставляю поток в спящем режиме желаемое количество времени. Итак, чтобы повторить каждые 1000 миллисекунд, я делаю что-то вроде этого:

@Override
public void call(Subscriber<? super List<ProductNode>> subscriber) {
    try {
        Log.d(TAG, "trying to load all products with pid: " + pid);
        subscriber.onNext(productClient.getProductNodesForParentId(pid));
        subscriber.onCompleted();
    } catch (Exception e) {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e1) {
            e.printStackTrace();
        }
        subscriber.onError(e);
    }
}

Так как этот метод в любом случае выполняется в потоке ввода-вывода, он не блокирует пользовательский интерфейс. Единственная проблема, которую я вижу, состоит в том, что даже первая ошибка сообщается с задержкой, поэтому задержка существует, даже если нет retry (). Я бы хотел, чтобы задержка не применяласьпосле ошибка, но вместодо повторная попытка (но не перед первой попыткой, очевидно).

Ответы на вопрос(12)

Ваш ответ на вопрос