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))); 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); ret results.get(n++); } }); }