public <T> CompletableFuture<T> timeOut(CompletableFuture<T> future, long millis,
				Supplier<T> valueIfLate) {
			return CompletableFuture.anyOf(future, after(millis)).thenApply(v -> {
				if (future.isDone()) {
					return future.getNow(null);
				}
				return valueIfLate.get();
			});
		}
Time a future out after the given interval

@param <T> the type of the future
@param future the future whose value is expected in the given interval
@param millis the time interval in milliseconds
@param valueIfLate a supplier for the value if the future doesn't complete in time
@return a future which completes with the given futures value, or the late value if it
        times out.
Ghidra/Framework/Generic/src/main/java/ghidra/async/AsyncTimer.java