WF-全扫描(3)-补偿(A):
补偿在工作流中是一个非常重要的概念。这一节我先以文字的形式简单的介绍一下补偿的定义,下一节我将配合示意图深入讲解补偿。
我们都知道,工作流程序是片断式地执行其内在活动的。尽管在工作流程序中活动的执行效果往往能从工作流程序边界外观察到,但是这并不是必须的。举一个简单的例子,WF程序中的一个活动可能会发送一封电子邮件,另一个活动可能在本地硬盘上创建了一个文件,并且写入了数据,还有一个活动可能调用了web服务。如果在这些活动的执行过程中出现了问题,那么一种解决办法就是恢复到原来的状态或者说是把那些已经执行了的活动所产生的效果撤销。这个很类似于Try / Catch。在C#中Catch的逻辑试图撤销在Try中的逻辑所产生的效果。进一步说,比如在Try中创建了一个文件,但是写入数据的过程中报错,那么Catch就试图去将文件删除,以便于重新拷贝。在工作流中Faulthandler的作用于此很类似了吧:)
工作流的编程模型允许为活动附加上补偿逻辑,从表面上看补偿逻辑和上一段中提到的取消逻辑很类似,一个活动补偿逻辑在代码中得到体现,那么补偿的效果就会产生。
在WF中补偿逻辑主要是用的CompensationHandlerActivity活动,这个活动可以添加到复合活动中,在复合活动中开发者就可以定义自己的补偿逻辑了。下一次我会详细讲解如何利用活动。
有下面几个容易走极端的概念:
1.所有活动都是可以补偿的。(错误)
2.补偿机制不总是我们所期待的。(正确)
上面两个问题大家可以思考一下,我下节课会给相应的解答。