docs: def join(self, timeout=None):
          """block until this thread terminates
  
          .. note::
  
              this method can block the calling coroutine if the thread has not
              yet completed.
  
          :param timeout:
              the maximum time to wait. with the default of ``None``, waits
              indefinitely
          :type timeout: int, float or None
  
          :raises:
              `RuntimeError` if called inside the thread, or it has not yet been
              started
          """
          if not self._started:
              raise RuntimeError("cannot join thread before it is started")
          if compat.getcurrent() is self._glet:
              raise RuntimeError("cannot join current thread")
          self._finished.wait(timeout)