1

我正在尝试对队列中的所有消息在并行 foreach 循环中运行,但出现此错误:

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

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

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

4

3 回答 3

5

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

只有 GetAllMessages 方法是线程安全的

于 2012-08-17T22:12:18.677 回答
2

Peek()Receive()(及其变体)不是线程安全的。你需要想出一个阻塞机制来避免碰撞。

于 2012-08-17T22:23:44.810 回答
1

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

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

GetAllMessages()将返回所有这些,但不会删除它们。您需要 Receive()单独使用每条消息以将其完全从队列中删除。

于 2012-08-27T10:35:58.283 回答