docs: def close(self):
          """
              Same as disconnect, but not a coroutine, i.e. it does not wait
              for disconnect to finish.
          """
  
          if self._state == ConnectionState.DISCONNECTED:
              return
  
          self._set_state(ConnectionState.DISCONNECTING)
          logger.info('%s Disconnecting...', self.fingerprint)
  
          if self._reconnect_task and not self._reconnect_task.done():
              self._reconnect_task.cancel()
              self._reconnect_task = None
  
          if self._ping_task and not self._ping_task.done():
              self._ping_task.cancel()
              self._ping_task = None
  
          if self._transport:
              self._transport.close()
  
          self._transport = None
          self._protocol = None
          self._disconnect_waiter = None
          self._db = _DbMock()
          self._set_state(ConnectionState.DISCONNECTED)