Parallel.Foreach与MSMQ

时间:2012-08-17 21:54:06

标签: c# .net task-parallel-library msmq

我正在尝试在队列中的所有消息上运行并行foreach循环,但是我收到此错误:

错误:收到邮件时未检索到Property Body。确保正确设置了PropertyFilter。

当我使用foreach(没有并行)执行相同的循环时,一切正常。

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

3 个答案:

答案 0 :(得分:5)

根据msdn

,看起来您使用的不是线程安全方法
  

只有GetAllMessages方法是线程安全的

答案 1 :(得分:2)

Peek()Receive()(及其变体)线程安全。您需要提出阻止机制以避免冲突。

答案 2 :(得分:1)

并行处理不能用于将消息从队列中取出,因为它是顺序的(如果已配置)事务性的。

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

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