docs: @Override
      public File call() throws Exception {
          try {
              latch.await();
  
              if (isTimeoutEnabled()) {
                  timedExecutor.schedule(new Runnable() {
                      public void run() {
                          try {
                              if (abortableDownload.getState() != Transfer.TransferState.Completed) {
                                  abortableDownload.abort();
                              }
                          } catch (Exception e) {
                              throw new SdkClientException(
                                  "Unable to abort download after timeout", e);
                          }
                      }
                  }, timeout, TimeUnit.MILLISECONDS);
              }
  
              setState(Transfer.TransferState.InProgress);
              createParentDirectoryIfNecessary(dstfile);
  
              if (isDownloadParallel) {
                  downloadInParallel();
              } else {
                  downloadAsSingleObject();
              }
              return dstfile;
          } catch (Throwable t) {
              cleanupAfterException();
              if (t instanceof Exception) {
                  throw (Exception) t;
              } else {
                  throw (Error) t;
              }
          }
      }