Рабочий процесс Windows - есть ли способ гарантировать выполнение только одного рабочего процесса? - PullRequest
1 голос
/ 13 ноября 2009

Рабочий процесс публикуется как служба wcf, и я должен гарантировать, что рабочие процессы выполняются последовательно. Есть ли способ - в коде или в конфигурации - гарантировать, что среда выполнения не запускает два рабочих процесса одновременно?

Ответы [ 3 ]

0 голосов
/ 13 ноября 2009

Нет способа сконфигурировать среду выполнения для ограничения количества выполняемых рабочих процессов.

Учтите, однако, что ответственность за работу поток лежит на контроле поток . Следовательно, сам рабочий процесс должен иметь средства для определения, выполняется ли в данный момент другой его экземпляр.

Я бы рассмотрел создание Activity, которая будет пытаться обновить запись в БД с точки зрения транзакции, чтобы создать экземпляр этого рабочего процесса. Если он обнаружит, что другой в данный момент выполняется, он может предпринять соответствующие действия. Может произойти сбой или он может поставить себя в очередь, используя EventActivity, чтобы получить уведомление о завершении предыдущего рабочего процесса.

0 голосов
/ 17 февраля 2010

Я не согласен, что это нужно обрабатывать на уровне WorkflowRuntime. Мне нравится идея настраиваемого Activity, своего рода MutexActivity, которое было бы CompositeActivity с бэкэндом БД. Первое выполнение будет записывать в базу данных, в которой находится мьютекс. Последующие вызовы помещают в очередь свои идентификаторы рабочего процесса и затем бездействуют. Когда MutexActivity завершает работу, он освобождает Mutex, загружает следующий рабочий процесс в очередь и вызывает содержащиеся в нем дочерние действия.

0 голосов
/ 13 ноября 2009

Возможно, вам потребуется проверить при запуске рабочего процесса другой запущенный экземпляр. Если найдено, отмените его.

...