/** * Return a {@link ScheduledCompletableFuture} that resolves at the given epochTime and runs the runnable. * * @param runnable Runs at the given epochTime * @param instant The epoch time * @return A {@link ScheduledCompletableFuture} */ default ScheduledCompletableFuture<@Nullable Void> at(SchedulerRunnable runnable, Instant instant) { return at(() -> { runnable.run(); return null; }, instant); }
@Override public ScheduledCompletableFuture<@Nullable Void> schedule(SchedulerRunnable runnable, String cronExpression) { return schedule(d -> runnable.run(), Collections.emptyMap(), cronExpression); }
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)); }
/** * Return a {@link ScheduledCompletableFuture} that resolves at the given epochTime and runs the runnable. * * @param runnable Runs at the given epochTime * @param instant The epoch time * @return A {@link ScheduledCompletableFuture} */ default ScheduledCompletableFuture<@Nullable Void> at(SchedulerRunnable runnable, Instant instant) { return at(() -> { runnable.run(); return null; }, instant); }
@Override public ScheduledCompletableFuture<@Nullable Void> schedule(SchedulerRunnable runnable, String cronExpression) { return schedule(d -> runnable.run(), Collections.emptyMap(), cronExpression); }
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)); }