有人知道为什么 System.Messaging 不提供异步版本的 Send 方法来将 MSMQ 消息发送到队列。
实际上有 Peek 和 Receive 方法的异步版本(通过可以转换为 C#5 异步等待方法的 Begin/End 对),但令人惊讶的是没有提供 BeginSend/EndSend 方法,只有一个 Send 方法,在我看来就像这是一个同步阻塞 I/O 调用。
我认为这不是 System.Messaging 的限制,而是 System.Messaging 使用的本机消息队列 API (mqrt.dll) 之一,它采用重叠结构作为函数中的参数MQReceiveMessage
通过 IOCP 使用重叠 I/O,而函数MQsendMessage
不采用这样的结构,所以看起来它是一个纯粹的同步调用。
我的问题仍然存在,有人知道为什么 MessageQueue API 不提供向队列发送消息的异步方式吗?
The MSMQ 文档 http://msdn.microsoft.com/en-us/library/windows/desktop/ms711381%28v=vs.85%29.aspx声明发送“始终是异步操作”。我已经有一段时间没有使用 MSMQ 了,但是 IIRC 一旦发送,消息就会在尝试通过网络发送之前刷新到本地磁盘。
所以,虽然不是truly异步(它必须等待磁盘写入),它应该相当快。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)