code: public void await(double seconds) throws Throwable {
      latch.await((long) (seconds * 1000), TimeUnit.MILLISECONDS);
      if (!exceptions.isEmpty())
        throw exceptions.poll();
  
      long pendingEvalBlocks = latch.getCount();
      if (pendingEvalBlocks > 0) {
        String msg = String.format("Async conditions timed out " +
            "after %1.2f seconds; %d out of %d evaluate blocks did not complete in time",
            seconds, pendingEvalBlocks, numEvalBlocks);
        throw new SpockTimeoutError(seconds, msg);
      }
    }
docs: Waits until all evaluate blocks have completed or the specified timeout
  (in seconds) expires. If one of the evaluate blocks throws an exception, it is rethrown
  from this method.
  
  @param seconds the timeout (in seconds)
  @throws InterruptedException if the calling thread is interrupted
  @throws Throwable the first exception thrown by an evaluate block