private Object executeAndWait(Callable<Object> taskCallable) throws Throwable {
    Object child;
    Future<Object> future = myTaskExecutor.submit(taskCallable);
    try {
      child = future.get();
    }
    catch (InterruptedException e) {
      throw new CancellationException("Operation cancelled");
    }
    catch (ExecutionException e) {
      Throwable cause = e.getCause();
      throw cause == null ? e : cause;
    }
    return child;
  }
private Object executeAndWait(Callable<Object> taskCallable)