#.net-4.0 #workflow-foundation-4
#.net-4.0 #рабочий процесс-foundation-4
Вопрос:
Мне нужен рабочий процесс, который может получать несколько одинаковых сообщений из MSMQ.
Пример:
Receive: CreateWorkflow (CanCreateInstance=True)
Do Something...
Parallel (CompletionCondition=ExitParallel)
Parallel Branch 1
Receive: Update (CanCreateInstance=False, Use correlation)
Process...
Parallel Branch 2
Receive: Finish (CanCreateInstance=False, Use correlation)
Set ExitParallel=True
Я хотел бы, чтобы мой рабочий процесс мог получать несколько сообщений об обновлении. Однако при этой настройке он может получить только 1. Согласно этому сообщению MSDN, это должно сработать, но у меня так и не получилось это сделать.
Есть ли решение поместить бесконечный цикл while в параллельную ветвь 1? Есть ли другой способ?
Ответ №1:
Чтобы получать несколько сообщений об обновлении, вам нужно будет поместить это получение в цикл. То, как вы настроили его прямо сейчас, обновление разрешено один раз, и параллель ожидает завершения только второй ветви с завершением.
Комментарии:
1. Помещение приема в цикл работает. Существует вероятность того, что другое сообщение «Обновить» приходит, когда рабочий процесс обрабатывает предыдущее сообщение «Обновить». В этом случае рабочий процесс не находится на приемнике. Сообщение будет потеряно? Или сообщение ожидает, пока рабочий процесс не вернется к получателю?
2. Служба рабочего процесса имеет свойство AllowBufferedReceive, которое позволяет вам помещать сообщения в очередь до того, как они будут обработаны, и это позволит вам вернуться к получению и прочитать второй запрос.