docs: public List<T> results(long timeout, TimeUnit unit)
              throws InterruptedException, TimeoutException {
          synchronized (this) {
              if (completed) {
                  return results == null ? Collections.emptyList()
                      : Collections.unmodifiableList(results);
              }
              wait(unit.toMillis(timeout));
          }
          if (completed) {
              return results == null ? Collections.emptyList()
                  : Collections.unmodifiableList(results);
          }
          throw new TimeoutException();
      }