docs: def _waitAny(*children):
      """Waits on any child Future created by the calling Future.
  
      :param children: A tuple of children Future objects spawned by the calling
          Future.
  
      :return: A generator function that iterates on futures that are done.
  
      The generator produces results of the children in a non deterministic order
      that depends on the particular parallel execution of the Futures. The
      generator returns a tuple as soon as one becomes available."""
      n = len(children)
      # check for available results and index those unavailable
      for index, future in enumerate(children):
          if future.exceptionValue:
              raise future.exceptionValue
          if future._ended():
              future._delete()
              yield future
              n -= 1
          else:
              future.index = index
      future = control.current
      while n > 0:
          # wait for remaining results; switch to controller
          future.stopWatch.halt()
          childFuture = _controller.switch(future)
          future.stopWatch.resume()
          if childFuture.exceptionValue:
              raise childFuture.exceptionValue
          # Only yield if executed future was in children, otherwise loop
          if childFuture in children:
              childFuture._delete()
              yield childFuture
              n -= 1