public void awaitCompletion() throws ExecutionException {
      while (!future.isDone() && !Disposer.isDisposed(parent)) {
        try {
          if (future.get(1, TimeUnit.SECONDS) != null) {
            break;
          }
        }
        catch (ExecutionException e) {
          if (e.getCause() instanceof ControlFlowException) {
            break;
          }
          throw e;
        }
        catch (TimeoutException e) {
          // another
        }
        catch (Exception e) {
          if (e.getCause() instanceof ControlFlowException) {
            break;
          }
          throw new RuntimeException(e);
        }
      }
    }
public void awaitCompletion()