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;
}