MSMQ поток безопасен? - PullRequest
       9

MSMQ поток безопасен?

7 голосов
/ 22 октября 2008

У меня есть несколько процессов, отслеживающих очередь MSMQ. Я хочу сделать многоэтапные операции, такие как сначала просмотреть сообщение, а затем на основе некоторых критериев получить сообщение. Одно сообщение может соответствовать критериям приема нескольких процессов, так что несколько процессов могут пытаться получить одно и то же сообщение. Будут ли эти операции потокобезопасными? Если нет, что я должен сделать, чтобы один процесс не смог получить сообщение, которое другой процесс уже получил?

Ответы [ 3 ]

14 голосов
/ 22 октября 2008

Согласно MSDN :

Потокобезопасны только следующие методы: BeginPeek, BeginReceive, EndPeek (IAsyncResult), EndReceive (IAsyncResult), GetAllMessages, Peek и Receive.

6 голосов
/ 27 октября 2008

Вас может заинтересовать запись в блоге Я писал на эту тему.

Короче говоря, API MSMQ C ++ является поточно-ориентированным, но не все методы System.Messaging являются поточно-ориентированными. В записи блога я обсуждаю, как вызвать MessageQueue.Send в потоке-безопасный способ.

5 голосов
/ 22 октября 2008

Сами операции являются потокобезопасными. Однако, если вы выполните многоэтапную операцию, вы можете обнаружить, что результаты не согласованы (например, посмотреть, есть ли данные в очереди, затем вызвать, чтобы получить данные, только чтобы обнаружить, что их больше нет).

...