【发布时间】:2023-03-14 12:45:02
【问题描述】:
有谁知道为什么 System.Messaging 不提供异步版本的 Send 方法来将 MSMQ 消息发送到队列。
实际上有异步版本的 Peek 和 Receive 方法(通过 Begin/End 对,可以转换为 C#5 异步等待方法),但令人惊讶的是,没有提供 BeginSend/EndSend 方法,只是一个看起来的 Send 方法对我来说,这是一个同步阻塞 I/O 调用。
我认为这不是 System.Messaging 的限制,而是 System.Messaging 使用的本机消息队列 API (mqrt.dll) 之一,它采用重叠结构作为函数 MQReceiveMessage 中的参数来使用重叠带 IOCP 的 I/O,而函数 MQsendMessage 没有采用这种结构,所以看起来它是一个纯粹的同步调用。
我的问题仍然存在,任何人都会知道为什么 MessageQueue API 不提供将消息发送到队列的异步方式?
【问题讨论】:
标签: c# async-await msmq