static ItIt> returnCodesOfServers_parallel_withTime(int timeout, S... servers) { ret returnCodesOfServers_parallel_withTime(timeout, asList(servers)); } static ItIt> returnCodesOfServers_parallel_withTime(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" { long time = sysTime(); int result = returnCodeHttpHEADWithTimeout(timeout, server); results.add(t3(server, result, sysNow()-time)); syncIncIntVar(counter); } // Make iterator delivering results as they come in ret iteratorFromFunction(new F0>() { int n = 0; public T3 get() { if (n >= l(servers)) null; waitForVarToChange(counter, n); ret results.get(n++); } }); }