当前位置:  开发笔记 > 程序员 > 正文

MSMQ线程安全吗?

如何解决《MSMQ线程安全吗?》经验,为你挑选了3个好方法。

我有多个进程监视MSMQ队列.我想做多步操作,比如先查看消息,然后根据一些标准接收消息.单个消息可以传递多个进​​程的接收标准,以便多个进程可以尝试接收相同的消息.这些操作是否是线程安全的?如果不是,我应该怎么做才能防止一个进程无法接收其他进程已经收到的消息?



1> Darksider..:

根据MSDN:

只有以下方法是线程安全的:BeginPeek,BeginReceive,EndPeek(IAsyncResult),EndReceive(IAsyncResult),GetAllMessages,Peek和Receive.


请注意,MessageQueue文档的.Net 4版本声明只有GetAllMessages()是线程安全的.我认为这是一个实际的变化,因为错误的文档可能已经与.Net 4文档一致更新.

2> 小智..:

您可能对我就此主题撰写的博客文章感兴趣.

简而言之,MSMQ C++ API是线程安全的,但并非所有System.Messaging方法都是线程安全的.在博客文章中,我将讨论如何以线程安全的方式调用MessageQueue.Send.



3> Brad Wilson..:

操作本身是线程安全的.但是,如果执行多步操作,您可能会发现结果不一致(例如,查看数据是否在队列中,然后调用以接收数据,仅发现它不再存在).


请注意:从.NET Framework 4开始,根据MSDN,"只有GetAllMessages方法是线程安全的".我建议更新答案以反映这一点,这样读者就不会感到困惑.
推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有