static ItIt> returnCodesOfMultipleServers_parallel_iterator(int timeout, S... servers) { ret returnCodesOfMultipleServers_parallel_iterator(timeout, asList(servers)); } static ItIt> returnCodesOfMultipleServers_parallel_iterator(final int timeout, final Collection servers) { final Var counter = new(0); final L> results = synchroList(); // Fire up the threads (with timeouts) for (fS server : servers) thread "Server Check" { results.add(pair(server, returnCodeHttpHEADWithTimeout(timeout, server))); print("Incrementing counter"); syncIncIntVar(counter); } // Make iterator delivering results as they come in ret iteratorFromFunction(new F0>() { int n = 0; public Pair get() { if (n >= l(servers)) null; waitForVarToChange(counter, n); print("Have counter: " + counter + " (n=" + n + ")"); ret results.get(n++); } }); }