Должен ли я использовать очередь сообщений, чтобы гарантировать, что служба Windows работает только с одной записью за раз? - PullRequest
0 голосов
/ 05 мая 2011

Только что наткнулся на статью, рассказывающую об очереди сообщений.У меня есть служба, которая запускает процесс каждые 1 секунду.Процесс изменяет статическое значение bool с именем «ProcessLock» на true.Затем процесс проверяет, является ли эта переменная истинной, прежде чем она выполнится следующим образом:

if (!ProcessLock)
{
    ProcessLock= true;
    //dostuff
}

Однако, если этот процесс должен был снова повторить цикл и ввести скобку сразу после того, как другая скобка вошла после скобки, но доон изменил значение bool на true, тогда у нас возникнет проблема, потому что код внутри начнет работать дважды на одних и тех же записях.Как называется это состояние?Я уверен, что у него есть многопоточность?

В любом случае, реальный смысл в том, могу ли я использовать MSMQ, чтобы обойти эту проблему?Какой процесс в целом?

1 Ответ

0 голосов
/ 05 мая 2011

Обмен сообщениями обычно используется для обеспечения надежной доставки и ослабления временной связи между службами.

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

С другой стороны, если бы вы могли создать рабочих элементов для обработки вашего сервиса, была бы полезна какая-то очередь.Это может быть просто доморощенный Queue<WorkItem>, без сложной инфраструктуры обмена сообщениями, если вы не заботитесь о надежности и не нуждаетесь в межпроцессном взаимодействии.

...