Сначала снимаю шляпу перед Штеффен Опелем (и его комментарии ниже). Я не смог уловить, что мой исходный пост связан документация , который был WF 3.5 специфический. Еще немного покопался.
Ради потомков я оставил свой предыдущий ответ ниже, помеченный как WF3.5 . Пожалуйста, смотрите WF4.0 для нескольких примечаний относительно отмены, отмены и завершения в WF4.0.
WF4.0
К сожалению, в WF4.0 мало явной документации, в которой обсуждаются различия в Отмена, Отмена и Завершение. Тем не менее, член метод документация ,
- При прерывании: а) действие немедленно останавливается, б) отмененный обработчик вызывается и в) завершенный обработчик не вызывается.
- При отмене, а) активности дается льготный период, чтобы изящно остановиться, после чего генерируется исключение TimeoutException, б) вызывается обработчик завершенных действий.
- При завершении, а) активности дается льготный период для постепенного прекращения, после которого выдается исключение TimeoutException, б) вызывается завершенный обработчик.
Различия между Abort и Cancel / Terminate весьма поразительны. Просто позвоните в Abort, чтобы сразу убить рабочий процесс. Разница между Cancel и Terminate более нюансирована. Отмена не требует какой-либо причины (это пустой метод без параметров), тогда как для завершения требуется причина (в формате строки или исключения).
Во всех случаях среда выполнения Workflow будет не выполнять какие-либо неявные действия от вашего имени (т. Е. Рабочие процессы не будут автоматически самоуничтожаться в качестве завершения WF3.5). Однако с помощью настраиваемой обработки исключений \ событий, предоставляемой средой выполнения, любые такие функции могут быть реализованы относительно легко.
WF3.5
Отмена
Согласно Msdn Документация
Действие переводится в состояние «Отмена» родительским действием явно или потому, что во время выполнения этого действия было сгенерировано исключение.
Хотя Отмена может использоваться для остановки всего рабочего процесса (т. Е. Вызывается в корневом действии), обычно она используется для остановки отдельных частей рабочего процесса (т. Е. Либо как исправление ошибок, либо как явное действие со стороны родителя). Короче говоря, Отмена является средством управления потоком операций.
Прервать и прекратить
Опять же, согласно Msdn документации
Прерывание отличается от Terminate тем, что хотя Abort просто очищает экземпляр рабочего процесса в памяти и может быть перезапущен с последней точки сохранения, Terminate очищает экземпляр рабочего процесса в памяти и сообщает службе сохранения, что экземпляр был очищен от объем памяти. Для SqlWorkflowPersistenceService это означает, что вся информация о состоянии для этого экземпляра рабочего процесса удаляется из базы данных по завершении. Вы не сможете перезагрузить экземпляр рабочего процесса из ранее сохраненной точки сохранения.
Что довольно ясно само по себе. Прерывание просто останавливает выполнение в памяти, тогда как Terminate останавливает выполнение в памяти , а уничтожает любое сохраненное состояние.