throws ExecutionException, InterruptedException, TimeoutException {
while (true) {
List<Reference> deferredRefs = Lists.newLinkedList();
for (Future<GetResponse> currentFuture : currentFutures) {
GetResponse resp = getFutureWithOptionalTimeout(currentFuture, timeout, timeoutUnit);
addEntitiesToResultMap(resp);
deferredRefs.addAll(resp.deferreds());
}
if (deferredRefs.isEmpty()) {
break;
}