RxJava Observable在出错后继续处理流

时间:2017-09-11 15:59:57

标签: java rx-java observable countdownlatch

考虑这个例子:

while(currentObjectNumber < maximumObjectNumber){

        maximumObjectNumber = getMaximumObjectNumber();

        CountDownLatch countDownLatch = new CountDownLatch(maximumObjectNumber - currentObjectNumber);

        Observable<MyObject> observable = catchUpToMaximumObject(currentObjectNumber);

        Subscription subscription = observable.subscribe(myObject ->{
            //do some work with myObject
            currentObjectNumber += 1;
            countDownLatch.countDown();
        }, throwable -> {
            System.out.println("ERROR CAUGHT");

            int x = maximumObjectNumber - currentObjectNumber;
            while(x != 0){
                countDownLatch.countDown();
                x -= 1;
            }

        });

        countDownLatch.await();
        subscription.unsubscribe();
}

基本上我从HTTP响应生成myObject时遇到错误,但是,我想忽略此错误并从失败的对象再次尝试。这个错误是随机发生的,不是因为我的代码。

目前,我的代码实现了这一点,但是,由于maximumObjectNumber非常大,并且每次出现错误countDownLatch都需要转到0时效率非常低。此外,{{1} }无限增加。

我一直在查看maximumObjectNumber方法,但它会重播已处理过的retry()。无论如何,我很确定这是错误的方式,但我发现网上没有任何内容有助于提高我在这种情况下的理解。

我唯一的另一个想法是为myObjects实现abort()方法,因此我不必在每个错误上倒数到0。

0 个答案:

没有答案