public static ListenableFuture makeTimeoutFuture()

in src/main/java/com/spotify/futures/FuturesExtra.java [60:91]


  public static <T> ListenableFuture<T> makeTimeoutFuture(
      ScheduledExecutorService scheduledExecutorService,
      ListenableFuture<T> future,
      final long timeout,
      final TimeUnit unit) {
    final SettableFuture<T> promise = SettableFuture.create();

    scheduledExecutorService.schedule(
        () -> {
          String message = "Future timed out after " + timeout + " " + unit.name();
          promise.setException(new TimeoutException(message));
        },
        timeout,
        unit);

    Futures.addCallback(
        future,
        new FutureCallback<T>() {
          @Override
          public void onSuccess(T result) {
            promise.set(result);
          }

          @Override
          public void onFailure(Throwable t) {
            promise.setException(t);
          }
        },
        scheduledExecutorService);

    return promise;
  }