/** * Get desired number of elements when they become available, * reporting progress while waiting * * @param elementCount How many elements to wait for * @param progressable Progressable to report progress * @return List of elements acquired */ public List<T> getElements(int elementCount, Progressable progressable) { ProgressableUtils.awaitSemaphorePermits( semaphore, elementCount, progressable); Preconditions.checkState(elements.size() == elementCount); List<T> ret = new ArrayList<>(elements); elements.clear(); return ret; } }