Когда в рабочий процесс создается исключение, оно будет эффективно «всплывать» через предков действия, пока оно не будет либо:
- Обрабатывается действием обработчика ошибок
- Достигает корневого действия (т. Е. Самого рабочего процесса), после чего рабочий процесс прекращается.
Хорошей практикой является создание обработчиков ошибок для всех возможных исключений в нужных местах. Используя операцию обработки ошибок, вы можете восстановить экземпляр рабочего процесса и эффективно вернуть конечный автомат в работоспособное состояние, а не завершать его.
Как только рабочий процесс завершается, он становится непригодным для использования, поэтому не будет никакого смысла сохранять его в постоянном хранилище после завершения завершения, поэтому его удаляют. Итак, вы можете видеть, ключ в том, чтобы остановить его неожиданное завершение.
Один последний совет. Когда рабочий процесс завершается, исключение, вызвавшее завершение, отправляется в прослушиватели событий как свойство Exception объекта WorkflowTerminationEventArgs. Я бы абсолютно порекомендовал иметь какой-нибудь механизм протоколирования, чтобы поймать это и вывести его куда-нибудь, чтобы в будущем, если по какой-то причине вы столкнулись с ошибками, их было намного легче отследить.