code: async def send_async(self, message, callback, timeout=0):
          
          # pylint: disable=protected-access
          try:
              raise self._error
          except TypeError:
              pass
          except Exception as e:
              _logger.warning("%r", e)
              raise
          c_message = message.get_message()
          message._on_message_sent = callback
          try:
              await self._session._connection.lock_async(timeout=None)
              return self._sender.send(c_message, timeout, message)
          finally:
              self._session._connection.release_async()
docs: Add a single message to the internal pending queue to be processed
          by the Connection without waiting for it to be sent.
  
          :param message: The message to send.
          :type message: ~uamqp.message.Message
          :param callback: The callback to be run once a disposition is received
           in receipt of the message. The callback must take three arguments, the message,
           the send result and the optional delivery condition (exception).
          :type callback:
           callable[~uamqp.message.Message, ~uamqp.constants.MessageSendResult, ~uamqp.errors.MessageException]
          :param timeout: An expiry time for the message added to the queue. If the
           message is not sent within this timeout it will be discarded with an error
           state. If set to 0, the message will not expire. The default is 0.