RxJava超时没有取消订阅源

时间:2017-10-19 07:09:33

标签: operators rx-java rx-java2

我正在订阅hot observable,然后将timeout运算符应用于它,但是我不想在抛出TimeoutException时取消订阅,只生成特殊项目(我知道该源最终会发出新的物品)。我怎样才能做到这一点?

我正在尝试将超时与onErrorReturn结合使用,但这又会导致onComplete对订阅者进行调用。

1 个答案:

答案 0 :(得分:0)

发布,暂停和重试(改编自my older answer):

Observable<Long> source =
    Observable.just(100L, 200L, 500L, 1000L, 5000L, 5500L, 6000L)
    .flatMap(v -> Observable.timer(v, TimeUnit.MILLISECONDS).map(a -> v));

source.publish(co -> 
    co.timeout(750, TimeUnit.MILLISECONDS, 
         Observable.just(-1L)
         .concatWith(Observable.error(new RuntimeException()))
    )
    .retry()
 ).blockingForEach(System.out::println);