code: def async_call(self, fn, *args, **kwargs):
          
          call_point = ''.join(format_stack(None, 5)[:-1])
  
          def handler():
              try:
                  fn(*args, **kwargs)
              except Exception as err:
                  msg = ("error caught while executing async callback:\n"
                         "{!r}\n{}\n \nthe call was requested at\n{}"
                         .format(err, format_exc_skip(1), call_point))
                  self._err_cb(msg)
                  raise
          self._session.threadsafe_call(handler)
docs: Schedule `fn` to be called by the event loop soon.
  
          This function is thread-safe, and is the only way code not
          on the main thread could interact with nvim api objects.
  
          This function can also be called in a synchronous
          event handler, just before it returns, to defer execution
          that shouldn't block neovim.