У меня есть следующий фрагмент кода, который, как я думал, задержит моно, я просто пытаюсь повторить попытку с интервалом отсрочки
private Mono<ThreeDSServerRedisDto> loadRedisDtoAndRetry(FrictionlessInfo frictionlessInfo, long retryNumber) {
int maxRetries = 10;
if (retryNumber >= maxRetries) {
log.info("Unable to load the data after {} attempts aborting", maxRetries);
return Mono.empty();
}
long delayFactor = (long) (Math.pow(retryNumber, 2)*20L);
if (retryNumber > 0 ){
log.info("Load data attempt {}, delayFactor {}s", retryNumber, delayFactor);
}
return Mono
.delay(Duration.ofSeconds(delayFactor))
.then(threeDSRedisService.loadByToken(frictionlessInfo.getThreeDSv2Token()))
.switchIfEmpty(loadRedisDtoAndRetry(frictionlessInfo, retryNumber + 1));
}
Однако, похоже, это не так задержка чего-либо. Почему не происходит задержка и как лучше всего повторить попытку с экспоненциальным откатом, когда моно пуст.