C# 与MSMQ并行的.Foreach
我试图在队列中的所有消息上以并行foreach循环运行,但出现以下错误: 错误:接收消息时未检索属性体。确保PropertyFilter设置正确 当我用foreach做同样的循环时(没有并行),一切都很好C# 与MSMQ并行的.Foreach,c#,.net,task-parallel-library,msmq,C#,.net,Task Parallel Library,Msmq,我试图在队列中的所有消息上以并行foreach循环运行,但出现以下错误: 错误:接收消息时未检索属性体。确保PropertyFilter设置正确 当我用foreach做同样的循环时(没有并行),一切都很好 你知道我应该怎么做才能解决这个问题吗?看起来你正在使用非线程安全的方法,根据 只有GetAllMessages方法是线程安全的 看起来您正在使用非线程安全方法,如 只有GetAllMessages方法是线程安全的 Peek()和Receive()(及其变体)不是线程安全的。您需要想出一种阻塞机
你知道我应该怎么做才能解决这个问题吗?看起来你正在使用非线程安全的方法,根据 只有GetAllMessages方法是线程安全的
看起来您正在使用非线程安全方法,如 只有GetAllMessages方法是线程安全的
Peek()
和Receive()
(及其变体)不是线程安全的。您需要想出一种阻塞机制来避免冲突。Peek()
和Receive()
(及其变体)不是线程安全的。您需要想出一种阻塞机制来避免冲突。并行处理无法将消息从队列中移除,因为它是顺序的,并且(如果已配置)是事务性的
如果删除A和B,并且对A的处理失败,它将返回到队列-但是B也被删除了
GetAllMessages()
将返回所有消息,但不会删除它们。你需要使用
Receive()
,以分别将每条消息从队列中完全删除。并行处理不适用于将消息从队列中删除,因为它是连续的且(如果已配置)事务性的
如果删除A和B,并且对A的处理失败,它将返回到队列-但是B也被删除了
GetAllMessages()
将返回所有消息,但不会删除它们。你需要使用
Receive()
分别用于每条消息,以将其完全从队列中删除。您有任何代码要显示吗?据了解,只有GetAllMessages
方法是线程安全的。异步读取队列的线程安全方式似乎已显示。相关问题:@Ido Lazar:您只是查看消息还是将其从队列中删除?您是否有任何代码可显示?据了解,只有GetAllMessages
方法是线程安全的。异步读取队列的线程安全方式似乎已显示出来。相关问题:@Ido Lazar:您只是查看消息还是将其从队列中删除?