docs: def call_async(func):
      """Decorates a function to be called async on the loop thread"""
  
      @wraps(func)
      def wrapper(self, *args, **kw):
          """Wraps instance method to be called on loop thread"""
  
          def call():
              """Calls function on loop thread"""
              try:
                  func(self, *args, **kw)
              except Exception:
                  logger.exception(
                      "failed to call async [%r] with [%r] [%r]", func, args, kw
                  )
  
          self.loop.call_soon_threadsafe(call)
  
      return wrapper