C# 与MSMQ并行的.Foreach

C# 与MSMQ并行的.Foreach,c#,.net,task-parallel-library,msmq,C#,.net,Task Parallel Library,Msmq,我试图在队列中的所有消息上以并行foreach循环运行,但出现以下错误: 错误:接收消息时未检索属性体。确保PropertyFilter设置正确 当我用foreach做同样的循环时(没有并行),一切都很好 你知道我应该怎么做才能解决这个问题吗?看起来你正在使用非线程安全的方法,根据 只有GetAllMessages方法是线程安全的 看起来您正在使用非线程安全方法,如 只有GetAllMessages方法是线程安全的 Peek()和Receive()(及其变体)不是线程安全的。您需要想出一种阻塞机

我试图在队列中的所有消息上以并行foreach循环运行,但出现以下错误:

错误:接收消息时未检索属性体。确保PropertyFilter设置正确

当我用foreach做同样的循环时(没有并行),一切都很好


你知道我应该怎么做才能解决这个问题吗?

看起来你正在使用非线程安全的方法,根据

只有GetAllMessages方法是线程安全的


看起来您正在使用非线程安全方法,如

只有GetAllMessages方法是线程安全的


Peek()
Receive()
(及其变体)不是线程安全的。您需要想出一种阻塞机制来避免冲突。

Peek()
Receive()
(及其变体)不是线程安全的。您需要想出一种阻塞机制来避免冲突。

并行处理无法将消息从队列中移除,因为它是顺序的,并且(如果已配置)是事务性的

如果删除A和B,并且对A的处理失败,它将返回到队列-但是B也被删除了

GetAllMessages()
将返回所有消息,但不会删除它们。你需要使用
Receive()
,以分别将每条消息从队列中完全删除。

并行处理不适用于将消息从队列中删除,因为它是连续的且(如果已配置)事务性的

如果删除A和B,并且对A的处理失败,它将返回到队列-但是B也被删除了

GetAllMessages()
将返回所有消息,但不会删除它们。你需要使用
Receive()
分别用于每条消息,以将其完全从队列中删除。

您有任何代码要显示吗?据了解,只有
GetAllMessages
方法是线程安全的。异步读取队列的线程安全方式似乎已显示。相关问题:@Ido Lazar:您只是查看消息还是将其从队列中删除?您是否有任何代码可显示?据了解,只有
GetAllMessages
方法是线程安全的。异步读取队列的线程安全方式似乎已显示出来。相关问题:@Ido Lazar:您只是查看消息还是将其从队列中删除?