code: @CanIgnoreReturnValue
    public static <V> V getUninterruptibly(Future<V> future) throws ExecutionException {
      boolean interrupted = false;
      try {
        while (true) {
          try {
            return future.get();
          } catch (InterruptedException e) {
            interrupted = true;
          }
        }
      } finally {
        if (interrupted) {
          Thread.currentThread().interrupt();
        }
      }
    }
docs: Invokes {@code future.}{@link Future#get() get()} uninterruptibly.
  
  <p>Similar methods:
  
  <ul>
  <li>To retrieve a result from a {@code Future} that is already done, use {@link
  Futures#getDone Futures.getDone}.
  <li>To treat {@link InterruptedException} uniformly with other exceptions, use {@link
  Futures#getChecked(Future, Class) Futures.getChecked}.
  <li>To get uninterruptibility and remove checked exceptions, use {@link
  Futures#getUnchecked}.
  </ul>
  
  @throws ExecutionException if the computation threw an exception
  @throws CancellationException if the computation was cancelled