docs: @SuppressWarnings("unchecked")
    private <T> CompletableFuture<T> callAsync(
        Function<AsyncExecution, Supplier<CompletableFuture<ExecutionResult>>> supplierFn, boolean asyncExecution) {
      FailsafeFuture<T> future = new FailsafeFuture(this);
      AsyncExecution execution = new AsyncExecution(scheduler, future, this);
      future.inject(execution);
      execution.inject(supplierFn.apply(execution), asyncExecution);
      execution.executeAsync(asyncExecution);
      return future;
    }