Запуск рабочего процесса из другого рабочего процесса - PullRequest
1 голос
/ 22 февраля 2010

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

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

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

1 Ответ

1 голос
/ 22 февраля 2010

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

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

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

...