Я реализовал это с помощью Flux.<Duration>generate()
:
Flux
.<Duration>generate(sink -> {
Date date = [NEXT_DATE];
if (date != null) {
long millis = date.getTime() - System.currentTimeMillis();
sink.next(Duration.ofMillis(millis));
}
else {
sink.complete();
}
})
.concatMap(duration ->
Mono.delay(duration)
...
)
.repeat();
Итак, каждый раз, когда мы возвращаемся к generate()
с этим repeat()
, мы можем заглянуть в какое-то состояние, чтобы получить следующее исполнение Date
.