docs: def _start_reconnect(self, error):
          """Starts a reconnection in the background."""
          if self._user_connected and not self._reconnecting:
              # We set reconnecting to True here and not inside the new task
              # because it may happen that send/recv loop calls this again
              # while the new task hasn't had a chance to run yet. This race
              # condition puts `self.connection` in a bad state with two calls
              # to its `connect` without disconnecting, so it creates a second
              # receive loop. There can't be two tasks receiving data from
              # the reader, since that causes an error, and the library just
              # gets stuck.
              # TODO It still gets stuck? Investigate where and why.
              self._reconnecting = True
              self._loop.create_task(self._reconnect(error))