C# 为什么赢了';我的消息队列不能正常关闭吗?

C# 为什么赢了';我的消息队列不能正常关闭吗?,c#,.net,message-queue,dispose,C#,.net,Message Queue,Dispose,如何在C#中停止来自MessageQueue的同步或异步接收 我发现,如果我在打开队列后没有收到任何来自队列的消息,我可以简单地关闭/处置队列,并且Receive或EndReceive方法将例外,这很好。但是,如果我已经成功地从队列接收到消息,我可以关闭并处理队列,但是挂起或异步接收将继续进行 我在别处读过一些建议,建议我将EnableConnectionCache设置为false,以确保在我请求时关闭消息队列,但不管怎样,似乎还是忽略我。正如binarycoder所建议的,我发现这只是非事务性

如何在C#中停止来自MessageQueue的同步或异步接收

我发现,如果我在打开队列后没有收到任何来自队列的消息,我可以简单地关闭/处置队列,并且Receive或EndReceive方法将例外,这很好。但是,如果我已经成功地从队列接收到消息,我可以关闭并处理队列,但是挂起或异步接收将继续进行


我在别处读过一些建议,建议我将EnableConnectionCache设置为false,以确保在我请求时关闭消息队列,但不管怎样,似乎还是忽略我。

正如binarycoder所建议的,我发现这只是非事务性队列的结果。至少就MSMQ而言。peek>receive模式将解决此问题,但前提是只有一个读卡器。否则,如果您遇到同样的问题,您将不得不使用事务性队列。

MS的可能副本在没有仔细考虑取消的情况下提出了开始/结束模式:(我不喜欢这个事实。请注意,即使在最好的情况下,取消通常也有可能是一个带有完成的竞态条件——这可能太长了,您无法在调用回调之前及时取消它。