docs: public Future<ScanResult> scanAsync(final ExecutorService executorService, final int numParallelTasks) {
          try {
              return executorService.submit(new Scanner(scanSpec, executorService, numParallelTasks,
                      /* scanResultProcessor = */ null, /* failureHandler = */ null, topLevelLog));
          } catch (final InterruptedException e) {
              // Interrupted during the Scanner constructor's execution (specifically, by getModuleOrder(),
              // which is unlikely to ever actually be interrupted -- but this exception needs to be caught).
              return executorService.submit(new Callable<ScanResult>() {
                  @Override
                  public ScanResult call() throws Exception {
                      throw e;
                  }
              });
          }
      }