我什么时候应该调用MessageQueue.EndReceive()?

时间:2010-11-18 18:47:03

标签: .net windows windows-services msmq

我一直在查看处理来自MSMQ的消息的服务的示例代码。在代码中,在ReceiveCompletedEventHandler的开头立即调用EndReceive()方法,然后它开始实际处理消息的任务。它只是我,还是完全错过了MSMQ的可靠性?只有在完全处理完消息后才能调用EndReceive()吗?

1 个答案:

答案 0 :(得分:3)

EndReceive只是意味着消息已经成功传递 - 它并不意味着你是否能够做任何有价值的事情。

听起来你正在考虑从MSMQ进行异步事务读取,在这种情况下,只有在完全处理你的消息时才能完成收据(一劳永逸地从队列中删除消息),无论你在上下文中意味着什么。 。但是异步事务读取是不可能的 - 请参阅MSDN documentation

  

不要使用异步调用   BeginReceive与事务。如果你   想要执行交易   异步操作,调用   BeginPeek,并把交易和   (同步)接收方法   在您创建的事件处理程序中   偷看行动。