Windows工作流程4:WorkflowApplication取消,终止和中止之间的区别

rek*_*kna 22 workflow-foundation-4

任何人都可以解释以下WorkflowApplication方法之间的区别:

中止取消终止

rek*_*kna 31

在进一步调查此问题后,我想总结一下这些差异:

终止:

  • 将触发工作流应用程序的已完成事件
  • CompletionState(WorkflowApplicationCompletedEventArgs)是Faulted
  • 将触发工作流应用程序的Unloaded事件
  • 工作流程完成
  • 将调用OnBodyCompleted上的活动

取消:

  • 将触发工作流应用程序的已完成事件
  • CompletionState(WorkflowApplicationCompletedEventArgs)已取消
  • 将触发工作流应用程序的Unloaded事件
  • 工作流程完成
  • 将调用OnBodyCompleted上的活动

中止:

  • 将触发工作流应用程序的Aborted事件
  • 工作流程未完成

未处理的异常

  • 触发OnUnhandledException
  • 在这个eventhandler中,返回值(类型为UnhandledExceptionAction)确定接下来会发生什么:
  • UnhandledExceptionAction.Terminate将终止工作流实例
  • UnhandledExceptionAction.Cancel将取消工作流实例
  • UnhandledExceptionAction.Abort将中止工作流实例
  • 每个都将触发上面解释的相应事件

更新:Abort似乎没有触发SQL持久性存储中的实例卸载.所以在我看来,你最好使用Cancel或Terminate,如果你必须根据完成状态执行某些操作,你可以在Complete事件中检查CompletionState.


joh*_*y g 15

首先,向Steffen Opel致敬(以及他在下面的评论).我没有发现我的原始帖子链接 文档是特定于WF 3.5的.多做一点挖掘.

为了后人的缘故,我在下面留下了我之前的回复,标记为WF3.5.有关WF4.0中的取消,中止和终止的一些注意事项,请参阅WF4.0.


WF4.0

不幸的是,很少有明确的文档讨论WF4.0中取消,中止和终止的差异.但是,从成员 方法 文档中,

  1. 在Abort上,a)活动立即停止,b)调用Aborted handler,并且c)调用Completed handler .
  2. 在取消时,a)活动被赋予宽限期以便优雅地停止,之后抛出TimeoutException,b)调用已完成的处理程序.
  3. 在Terminate上,a)活动被赋予一个宽限期以便优雅地停止,之后抛出TimeoutException,b)调用Completed handler.

Abort和Cancel/Terminate之间的区别非常惊人.只需致电Abort直接杀死工作流程.取消和终止之间的区别更加细微.取消不需要任何理由(它是一个无参数的方法),而Terminate 需要一个原因(以字符串或异常格式).

在所有情况下,Workflow运行时都不会代表您执行任何隐式操作(即工作流不会自动破坏la WF3.5 Terminate).但是,通过运行时公开的高度可自定义的异常\事件处理,可以相对容易地实现任何此类功能.


WF3.5

取消

根据Msdn 文档

父活动明确地将活动置于Canceling状态,或者因为在执行该活动期间抛出了异常.

虽然取消可用于停止整个工作流(即在根活动上调用),但它通常用于停止工作流的离散部分(即,作为错误恢复或对父部分的显式操作).简而言之,取消是工作流控制流的一种手段.

中止并终止

再次,根据Msdn文档

Abort与Terminate的不同之处在于,Abort只是清除内存中的工作流实例,并且可以从最后一个持久点重新启动,Terminate清除内存中的工作流实例,并通知持久性服务实例已从内存中清除.对于SqlWorkflowPersistenceService,这意味着终止时将从数据库中删除该工作流实例的所有状态信息.您将无法从先前存储的持久性点重新加载工作流实例.

这本身就很清楚.Abort仅停止内存执行,而Terminate停止内存执行销毁任何持久状态.

  • 嗯,您的MSDN链接都是针对WF 3.5文档的.虽然当然有很多概念上的相似之处,但是这个架构[已经发生了很大变化](http://msdn.microsoft.com/en-us/library/dd489410.aspx)使得WF 3.5的答案对WF 4的问题充满了困惑. ,我很害怕 - 比较[理解] [Windows Workflow Architecture](http://msdn.microsoft.com/en-us/library/dd489413.aspx)结尾处的*活动生命周期*部分活动状态模型](http://msdn.microsoft.com/en-us/library/bb628512%28VS.90%29.aspx)从你回答链接. (2认同)