rek*_*kna 22 workflow-foundation-4
任何人都可以解释以下WorkflowApplication方法之间的区别:
中止取消终止
rek*_*kna 31
在进一步调查此问题后,我想总结一下这些差异:
终止:
取消:
中止:
未处理的异常
更新: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中取消,中止和终止的差异.但是,从成员 方法 文档中,
Abort和Cancel/Terminate之间的区别非常惊人.只需致电Abort直接杀死工作流程.取消和终止之间的区别更加细微.取消不需要任何理由(它是一个无参数的方法),而Terminate 需要一个原因(以字符串或异常格式).
在所有情况下,Workflow运行时都不会代表您执行任何隐式操作(即工作流不会自动破坏la WF3.5 Terminate).但是,通过运行时公开的高度可自定义的异常\事件处理,可以相对容易地实现任何此类功能.
WF3.5
取消
父活动明确地将活动置于Canceling状态,或者因为在执行该活动期间抛出了异常.
虽然取消可用于停止整个工作流(即在根活动上调用),但它通常用于停止工作流的离散部分(即,作为错误恢复或对父部分的显式操作).简而言之,取消是工作流控制流的一种手段.
中止并终止
再次,根据Msdn文档
Abort与Terminate的不同之处在于,Abort只是清除内存中的工作流实例,并且可以从最后一个持久点重新启动,Terminate清除内存中的工作流实例,并通知持久性服务实例已从内存中清除.对于SqlWorkflowPersistenceService,这意味着终止时将从数据库中删除该工作流实例的所有状态信息.您将无法从先前存储的持久性点重新加载工作流实例.
这本身就很清楚.Abort仅停止内存执行,而Terminate停止内存执行并销毁任何持久状态.
| 归档时间: |
|
| 查看次数: |
8622 次 |
| 最近记录: |