2011-03-31 61 views
1

如何停止從C#中的MessageQueue進行同步或異步接收?爲什麼我的MessageQueue不能正確關閉?

我發現,如果自從打開它以來我沒有收到任何來自隊列的消息,我可以簡單地關閉/處置隊列,並且Receive或EndReceive方法將除外,這很好。但是,如果我已經成功接收到來自隊列的消息,則可以關閉並處理隊列,但掛起或異步接收將繼續進行!

我已經讀過其他地方,並發現一些建議,我應該讓EnableConnectionCache爲false以確保消息隊列在我詢問時關閉,但它似乎仍然無視我。

+0

[.NET異步MSMQ]的可能的重複(http://stackoverflow.com/questions/5486058/net-asynchronous-msmq) – 2011-03-31 13:39:58

+0

MS想出了開始/結束模式,沒有考慮到取消:(我不喜歡這個事實,即使在最好的情況下,在取消的情況下,通常可能會有一個競爭條件完成 - 它可能太遠了,以至於在調用回調之前無法及時取消它。 – 2011-12-24 02:40:25

回答

0

作爲二進制編碼器的建議,我發現這只是非事務性隊列的結果。至少就MSMQ而言。窺視>接收模式將解決該問題,但前提是隻有一個閱讀器。否則,如果你有同樣的問題,你將不得不使用事務隊列。