В настоящее время я использую последовательные рабочие процессы в Windows WF, но вам нужно разбить процесс, потому что теперь у меня есть несколько рабочих процессов, которым необходимо разделить функциональность. Я считаю, что есть способ создать пользовательские действия кода в WF, которые в основном выполнили бы это, но мой план состоит в том, чтобы в конечном итоге сорвать WF в пользу Stateless; поэтому я не хочу тратить время на то, чтобы научиться программировать пользовательские действия.Выполнение рабочего процесса из другого рабочего процесса
Единственное, что я могу придумать, это создать новый проект WF, содержащий все «общие» поведения, а затем запустить их из рабочих потоков, которые в них нуждаются. Я сейчас работаю над этим, чтобы понять, как это происходит, но может ли кто-нибудь сказать мне, что это просто плохая идея?
EDIT - «проблема» один я вижу сейчас, что я использую синглтон для выполнения WF, как я испытал огромные утечки памяти раньше, даже когда я выбрасывайте WF RT правильно. Я отслеживаю все экземпляры WF в первом вызывающем объекте рабочего процесса, поэтому для правильной обработки событий мне придется передать этот список экземпляров WF в рабочий процесс, чтобы он мог добавлять WF, который я запускаю изнутри. Кажется немного беспорядочным для меня, хотя я, конечно, все еще могу попробовать это так. Я отслеживаю экземпляры WF, потому что я пытаюсь использовать это, чтобы включить функции Pause/Abort/Resume. Когда пользователь нажимает соответствующую кнопку в графическом интерфейсе, он перебирает все экземпляры WF и вызывает метод сопоставления.
Спасибо, Морис, я рассмотрю ваши предложения. Однако, просто чтобы сыграть адвоката дьявола, почему бы основной рабочий процесс не дождался завершения детского рабочего процесса? У меня есть активность кода в основном WF, который запускает экземпляр дочернего рабочего процесса, но я использую AutoResetEvent для создания блока активности кода. Только до тех пор, пока дочерний рабочий процесс не завершится (и не назначит событие в обработчике WorkflowCompleted), основной рабочий процесс продолжается. В настоящее время я разорван на обработку ошибок - следует ли использовать try/catch или FaultHandlers? – Dave
Я думаю, мне нужно перечитать эту статью: http://msdn.microsoft.com/en-us/magazine/dd419656.aspx – Dave
Морис, после успешного внедрения подхода workflow-in-the-workflow, я попробовал предложение. Я был очень рад видеть, насколько легко и логично создать настраиваемую деятельность, которую вы можете просто добавить в другие рабочие процессы. Мой единственный вопрос теперь в том, каков механизм получения параметров, передаваемых в рабочий процесс, в пользовательскую активность? Поскольку активность внутри рабочего процесса, я ожидаю, что он каким-то образом сможет получить доступ к параметрам рабочего процесса, но пока не нашел ответа. ** ИЗМЕНИТЬ ** ОК, я ткнул и только что увидел их в окне свойств в дизайнере! – Dave