我使用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);
答案 0 :(得分:1)
我不知道它是否适合您的解决方案,但我想到的是
Observable observable = getObservable();
observable.timeout(5, TimeUnit.SECONDS)
.retry(e -> e instanceof TimeoutException)
.subscribe(mSudokuPuzzleObserver);
如果observable在5秒内没有发出任何内容, timeout
将抛出异常,如果错误是由超时引起的,它将重试完全相同的observable。