Запуск рабочего процесса из другого рабочего процесса

В настоящее время я использую последовательные рабочие процессы в Windows WF, но мне нужно разбить процесс, потому что теперь у меня есть несколько рабочих процессов, которые должны совместно использовать часть функциональности. Я считаю, что в WF есть способ создать пользовательские кодовые операции, которые в основном это сделали бы, но я планирую в конечном итоге отказаться от WF в пользу Stateless; поэтому я не хочу прямо сейчас тратить время на изучение того, как кодировать настраиваемые действия.

Единственное, что я могу придумать, - это создать новый проект WF, содержащий все «общие» поведения, а затем запустить их из рабочих процессов, которые в них нуждаются. Сейчас я работаю над этим, чтобы посмотреть, как все пойдет, но может ли кто-нибудь сказать мне, является ли это просто плохой идеей?

EDIT - одна «проблема», которую я вижу прямо сейчас, заключается в том, что я использую синглтон для среды выполнения WF, так как раньше я сталкивался с серьезными утечками памяти, даже когда я правильно избавляюсь от WF RT. Я отслеживаю все экземпляры WF в исходной вызывающей стороне рабочего процесса, поэтому для правильной обработки событий мне пришлось бы передать этот список экземпляров WF в рабочий процесс, чтобы он мог добавить WF, который я запускаю внутри. Мне это кажется немного запутанным, хотя я, конечно, все еще могу попробовать этот способ. Я отслеживаю экземпляры WF, потому что пытаюсь использовать это, чтобы включить функцию паузы / прерывания / возобновления. Когда пользователь нажимает соответствующую кнопку в графическом интерфейсе, он перебирает все экземпляры WF и вызывает соответствующий метод.


person Dave    schedule 22.02.2010    source источник


Ответы (1)


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

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

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

person Maurice    schedule 22.02.2010
comment
Спасибо, Морис, я рассмотрю твои предложения. Однако, чтобы сыграть адвоката дьявола, почему бы основной рабочий процесс не дождаться завершения дочернего рабочего процесса? У меня есть действие кода в основном WF, которое запускает экземпляр дочернего рабочего процесса, но я использую AutoResetEvent для создания блока активности кода. Только до тех пор, пока дочерний рабочий процесс не завершится (и не установит событие в обработчике WorkflowCompleted), основной рабочий процесс продолжается. В настоящее время меня беспокоит обработка ошибок - мне следует использовать try / catch или FaultHandlers? - person Dave; 22.02.2010
comment
Думаю, мне нужно перечитать эту статью: msdn.microsoft.com/en -us / magazine / dd419656.aspx - person Dave; 22.02.2010
comment
Морис, после успешной реализации подхода «рабочий процесс в рабочем процессе» я попробовал ваше предложение. Я был очень взволнован, увидев, насколько легко и логично создать настраиваемое действие, которое можно просто перенести в другие рабочие процессы. У меня единственный вопрос: каков механизм передачи параметров, передаваемых в рабочий процесс, в настраиваемое действие? Поскольку действие находится внутри рабочего процесса, я ожидал, что он каким-то образом сможет получить доступ к параметрам рабочего процесса, но пока не нашел ответа. РЕДАКТИРОВАТЬ хорошо, я покопался и только что увидел их в окне свойств в дизайнере! - person Dave; 22.02.2010
comment
Еще раз извините, я был слишком взволнован. Диалог свойств не позволяет мне выбирать или даже вводить имена переменных. А некоторые даже неактивны ... - person Dave; 22.02.2010
comment
Я нашел эту статью, в которой говорится, что Dependency Properties в рабочем процессе - это правильный путь - вы можете привязать значения в настраиваемом действии к DP. msdn.microsoft.com/en-us/magazine/cc163504.aspx - person Dave; 23.02.2010