Оператор времени ожидания измеряет время, прошедшее между временем подписки и сигналом onNext / onComplete, наблюдаемым оператором времени ожидания.
Рассмотрим следующий пример:
Mono.delay(Duration.ofMillis(1000))
.then(Mono.delay(Duration.ofMillis(1000)))
.then(Mono.delay(Duration.ofMillis(1000)))
.timeout(Duration.ofMillis(2500))
.block();
If, оператор 2(время, измеренное между операциями) или 3 (только продолжительность последних операций) были правильными, тогда приведенный выше фрагмент кода не выдавал бы никакой ошибки.
Однако в этом случае операция тайм-аута измеряет продолжительностьвсего восходящего потока, что составляет оператор 1 (сумма всех измеренных операций). ПРАВИЛЬНО .
В примере сумма всех операций (1000 + 1000 + 1000 = 3000 мс) больше, чем сконфигурированнаявремя ожидания (2500 мс), поэтому код приводит к ошибке.