code: public T waitForAny(List<Future<T>> futures, @SuppressWarnings("unchecked") TaskObserver<T>... observers) throws InterruptedException, ExecutionException {
  		int count = futures.size();
  		while(count-- > 0) {
  			int id = queue.take();
  			logger.debug("task '{}' complete (count: {}, queue: {})", id, count, queue.size());
  			T result = futures.get(id).get();
  			for(TaskObserver<T> observer : observers) {
  				observer.onTaskComplete(tasks.get(id), result);
  			}
  			return result;
  		}
  		return null;
  	}
docs: Waits until the first task completes, then calls the (optional) observers
  to notify the completion and returns the result.
  
  @param futures
  the list of futures to wait for.
  @param observers
  an optional set of observers.
  @return
  the result of the first task to complete.
  @throws InterruptedException
  @throws ExecutionException