code: @Override
    public TOutput get() throws InterruptedException, ExecutionException, CancellationException {
      countDownLatch.await();
      if (userResult != null) {
        return userResult.get();
      } else {
        assert this.cancelled.get() || userException != null;
        if (userException != null) {
          throw new ExecutionException(userException);
        }
  
        throw new CancellationException("Tasklet was cancelled.");
      }
    }
docs: Infinitely wait for the result of the task.
  @throws InterruptedException if the thread is interrupted.
  @throws ExecutionException if the Tasklet execution failed to complete.
  @throws CancellationException if the Tasklet was cancelled.