考虑这个例子:
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。