Нет, я так не думаю. Ниже приведен соответствующий отрывок из книги «Основы Windows Workflow Foundation»
Хотя операции на
WorkflowInstance может быть вызван на
произвольные потоки, WF планировщик
размещен в экземпляре программы
обслуживается одним потоком. WF
время выполнения гарантирует, что никакой другой
поток может вмешиваться или обслуживать
планировщик, в то время как его диспетчерский цикл
активно обрабатывает рабочие элементы. Быть
понятно, хостинг приложение может
вызывать методы WorkflowInstance для
отдельные темы одновременно - это
не влияет на планировщик
выполнение мероприятий на
специальная тема (для эпизода
исполнение).
РЕДАКТИРОВАТЬ: Для дальнейшего изучения проблемы, я создал WF с ParallelActivity
, который содержит два HandleExternalEvent
действия. Обработчик invoked
каждого действия просто переводит свой поток в спящий режим на 3 секунды. В хост-программе я создал два потока и инициировал два события через сервис. Кроме того, я подкласс ManualWorkflowSchedulerService
, чтобы отслеживать его Schedule
метод. Вот результаты (время в десятых долях мс):
Src Time Thread
HOST 7616 1 CreateWorkflow
MWSS 7642 1 Schedule workflow
HOST 8297 12 Trigger event 1 and wait for RunWorkflow
MWSS 8316 12 Schedule workflow
WF 8327 12 Handler 1 Invoked...wait 3 sec
HOST 8327 1 Press any key to exit...
HOST 8767 13 Trigger event 2 and wait for RunWorkflow
MWSS 8784 13 Schedule workflow
WF 38319 12 Handler 1 Completed
WF 38406 12 Handler 2 Invoked...wait 3 sec
WF 68396 12 Handler 2 Completed
HOST 68573 13 RunWorkflow for event 2 completed in 5,98 sec
HOST 68794 12 WorkflowCompleted
HOST 68795 12 RunWorkflow for event 1 completed in 6,05 sec
Некоторые замечания:
- Планировщик всегда использует поток хоста для планирования рабочего элемента.
- Экземпляр рабочего процесса не всегда использует поток хоста для выполнения действий. Если в потоке уже выполняется другое действие, то этот поток используется для выполнения всех запланированных действий.
- Выполнение обработчиков потокобезопасно, но оба потока ждут завершения обоих обработчиков!
Если последнее вас беспокоит, я бы предложил следующие посты:
Кстати, вы можете поделиться информацией о сценарии, с которым вы столкнулись?