我有多个进程监视MSMQ队列.我想做多步操作,比如先查看消息,然后根据一些标准接收消息.单个消息可以传递多个进程的接收标准,以便多个进程可以尝试接收相同的消息.这些操作是否是线程安全的?如果不是,我应该怎么做才能防止一个进程无法接收其他进程已经收到的消息?
根据MSDN:
只有以下方法是线程安全的:BeginPeek,BeginReceive,EndPeek(IAsyncResult),EndReceive(IAsyncResult),GetAllMessages,Peek和Receive.
您可能对我就此主题撰写的博客文章感兴趣.
简而言之,MSMQ C++ API是线程安全的,但并非所有System.Messaging方法都是线程安全的.在博客文章中,我将讨论如何以线程安全的方式调用MessageQueue.Send.
操作本身是线程安全的.但是,如果执行多步操作,您可能会发现结果不一致(例如,查看数据是否在队列中,然后调用以接收数据,仅发现它不再存在).