Чтобы ответить на вопрос напрямую, вы можете использовать takeUntilOther()
, а затем switchIfEmpty()
, чтобы достичь того, что вы хотите:
directories = delayCache(Mono.fromCallable(provider::list))
...
public <T> Mono<T> delayCache(Mono<T> mono) {
return mono.takeUntilOther(Mono.delay(Duration.ofSeconds(10)).cache())
.switchIfEmpty(mono.cache(Duration.ofMinutes(15)));
}
Однако, предупреждающее слово - это звучит как проблема XY. Я бы настоятельно посоветовал бы не менять код, который хорошо работает в производственном процессе, просто для того, чтобы ваши тесты работали хорошо, поскольку это не подкрепляет необходимость иметь тесты во-первых. как будто вашей тестовой среде нужна определенная работа (так или иначе), чтобы снять ограничение на «время потепления», о котором вы говорите.