《WF编程》系列之26 - 基本活动:ParallelActivity & DelayActivity & ListenActivity

《WF编程》系列之26 - 基本活动:ParallelActivity & DelayActivity & ListenActivity

4.1.9 ParallelActivity

Parallel活动允许多个活动同时执行,但Parallel活动并没有采用多线程机制,在工作流内部只有一个线程执行.

看起来好像有点复杂,这样说吧,假设一份文件需要公司里三位领导的批准:CEO,CTO和CFO.宿主会把这份文件递交给三位老大,这就是Parallel活动的”并行”.领导审批之后会触发审批相应的事件(领导们很难在同一时刻审批,所以Parallel活动并不是真正的并行),我们知道HandleExternalEvent活动可以等待并处理本地通信服务的事件,所以我们还需要三个HandleExternalEvent活动.

接下来编写一个顺序工作流来实现上面的需求,我们假设CEO的审批最先到达,然后是CTO,最后是CFO.只是这样的话在CEO还没有作出决定之前CTO和CFO只好干等.

如果审批的顺序并不重要的话,通过软件来收集审批结果就会更有效率.下图中的Parallel活动同时监听了三个事件.哪位老大的审批最先送达,工作流就处理哪个事件,同时还等待另外两个事件.只有当所有的分支都完成后Parallel活动才会结束.




4.1.10 DelayActivity

Delay活动会初始化一个计时器并等待它到期. Delay活动经常被用来模拟超时, 当计时器到期后工作流引擎还会继续执行.它的TimeoutDuration属性的值是TimeSpan类型,表示需要等待的时间.我们可以在设计器中初始化这个属性,也可以以编程的方式在InitializeTimeoutDuration事件中更改它的值:

private   void  delayActivity1_InitializeTimeoutDuration( object  sender, EventArgs e)



DelayActivity delay 
=  sender  as  DelayActivity; 

if  (delay  !=   null



//  a 5 second time span 

delay.TimeoutDuration 
=   new  TimeSpan( 0 0 5 ); 

}

}

Delay活动经常被用在Listen活动的内部.

4.1.11 ListenActivity

和Parallel活动相比,Listen活动也可以包含多个分支.但不同的是Listen活动的目的仅仅是完成一个分支.Listen活动的分支是EventDriven活动,EventDriven活动的特点是它必须以事件的到达为其开始的条件(即EventDriven活动的第一个子活动必须实现IEventActivity接口).我们将和状态机工作流一起介绍EventDriven活动的更多细节.

再继续前面关于CEO,CTO和CFO的例子,上一节中,工作流在收集齐三位领导的三分审批之后才会继续.如果我们只需要一份审批,就应该用Listen活动来替换Parallel活动.当一份审批到达时,Listen活动就会执行相应的分支事件并取消其它分支的执行.

之前曾提到,我们可以使用Delay活动来模拟超时.下图正是采用了这种搭配.如果在到期之前仍然没有事件到达,我们就可以执行一个可选的操作,比如给领导发送Email来提醒他审批,或者直接做一个默认的审批处理,就当领导默认了!

http://xiaoshatian.cnblogs.com/

转载于:https://www.cnblogs.com/andylaufzf/archive/2008/08/27/1277546.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值