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);
    }
  }
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
spock-core/src/main/java/spock/util/concurrent/AsyncConditions.java