如何使用retryWhen()Rxandroid

时间:2018-01-04 00:19:33

标签: java android recursion rx-java2 rx-android

我使用RXJava调用昂贵的递归函数。大部分时间它运行得非常快,但有时会产生太长时间

如果线程仍在运行,有没有办法可以在5秒后使用retryWhen()

 observable = getObservable(); ///Runs a recursive function
 mObserver = getSudokuPuzzleObserver();

 observable.subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .retryWhen() // How to use retryWhen onNext() isn't called in 5 seconds
            .subscribe(mSudokuPuzzleObserver);

1 个答案:

答案 0 :(得分:1)

我不知道它是否适合您的解决方案,但我想到的是

    Observable observable = getObservable();
    observable.timeout(5, TimeUnit.SECONDS)
            .retry(e -> e instanceof TimeoutException)
            .subscribe(mSudokuPuzzleObserver);
如果observable在5秒内没有发出任何内容,

timeout将抛出异常,如果错误是由超时引起的,它将重试完全相同的observable。