private <T> void schedule(ScheduledCompletableFutureRecurring<T> schedule, SchedulerRunnable runnable, SchedulerTemporalAdjuster temporalAdjuster) { final Temporal newTime = ZonedDateTime.now(clock).with(temporalAdjuster); final ScheduledCompletableFutureOnce<T> deferred = new ScheduledCompletableFutureOnce<>(); deferred.thenAccept(v -> { if (temporalAdjuster.isDone(newTime)) { schedule.complete(v); } else { schedule(schedule, runnable, temporalAdjuster); } }); schedule.setScheduledPromise(deferred); atInternal(deferred, () -> { runnable.run(); return null; }, Instant.from(newTime)); }
private <T> void schedule(ScheduledCompletableFutureRecurring<T> schedule, SchedulerRunnable runnable, SchedulerTemporalAdjuster temporalAdjuster) { final Temporal newTime = ZonedDateTime.now(clock).with(temporalAdjuster); final ScheduledCompletableFutureOnce<T> deferred = new ScheduledCompletableFutureOnce<>(); deferred.thenAccept(v -> { if (temporalAdjuster.isDone(newTime)) { schedule.complete(v); } else { schedule(schedule, runnable, temporalAdjuster); } }); schedule.setScheduledPromise(deferred); atInternal(deferred, () -> { runnable.run(); return null; }, Instant.from(newTime)); }