docs: @Override
      public void close() throws ExecutionException {
          for (Future<?> future; (future = workerFutures.poll()) != null;) {
              try {
                  // Block on completion using future.get(), which may throw one of the exceptions below
                  future.get();
              } catch (final CancellationException e) {
                  if (log != null) {
                      log.log("~", "Worker thread was cancelled");
                  }
              } catch (final InterruptedException e) {
                  if (log != null) {
                      log.log("~", "Worker thread was interrupted");
                  }
                  // Interrupt other threads
                  interruptionChecker.interrupt();
              } catch (final ExecutionException e) {
                  interruptionChecker.setExecutionException(e);
                  interruptionChecker.interrupt();
              }
          }
      }