WF活动(三)---控制流活动

本篇内容包括:IfElse、Sequence、While和Parallel、Policy、ConditionActivityGroup、Replicator、SynchronizationScope。

示例:下载

IfElse

IfElse活动拖到流程设计器上,默认就会有两个分支。这些分支都是IfElseBranch活动。对每一个IfElseBranchActivity应用一个条件,如果该条件的计算结果为true,则执行该活动中包含的活动;否则,计算下一个IfElseBranchActivity的条件,直到遇到一个符合条件的活动。

最后一个分支不用设置条件,它被当做Else分支处理。

 

 

 

(运行界面)

 

(运行结果)

 

选择相应的参数,就会根据条件判断执行相应的分支。

Sequence

      Sequence是WF中最基本最简单的活动,它将多个活动链接在一起按顺序的方式执行。诸如WhileActivity活动之类的一些活动只能包含一个活动,SequenceActivity活动提供了一种简单方法,可将包含在单个SequenceActivity活动中的多个活动添加到只能包含一个活动的活动中。

 

While和Parallel

 

While

在每次迭代执行之前,都会计算与Condition属性相关联的规则条件或代码条件。如果该条件为true,则执行子活动,否则跳出循环。

While活动只能包含一个自活动,所有可以在WhileActivity内部使用SequenceActivity或者ParallelActivity,以便包含多个活动。

 

Parallel

      Parallel子活动只能是Sequence,只有所有的子活动完成以后,Parallel才能完成。虽然 SequenceActivity 分支活动计划为同时开始处理,但它们却不会同时开始处理。Windows Workflow Foundation 运行时对每个工作流实例使用一个线程。 ParallelActivity 活动中所有单独的分支共享同一个工作流实例线程。 因此,一次只执行一个分支的一个活动

所以,各个并行活动间真正的执行顺序是无法保证的,如果你需要强制指定并行执行路径间的顺序,可以考虑使SynchronizationScope

处理操作首先执行其中一个 SequenceActivity 分支包含的一个活动。 该活动完成后,将会执行另一个分支的顺序中的下一个活动,依此类推。如下图(来自生鱼片):

 

 

 

如果 SequenceActivity 分支包含一个活动(如已阻止的 DelayActivity 活动),则执行不会停止下来并等待取消阻止该活动, 而是执行下一个 SequenceActivity 分支的顺序中的下一个活动。如图:

 

 

示例说明:

 
在这里输入循环次数,

 

 

 

比如2,那么就会看到以下结果:

 

 

然后我们在code1和code3之间加入一个DelayActivity,那么执行结果如下:

 

 

 

Policy

类似于IfElse活动以“Declarative Rule Condition”方式进行逻辑判断。区别在于Policy活动时一组逻辑规则的集合,在规则集合内的每个规则都可以通过“Then Actions”来执行来执行当逻辑判断结果为“真”时所需要的操作,在“Else Actions”内来执行当逻辑判断为假时候所需要的操作

关于本活动的例子,就是坚持学习WF(21):规则引擎中的RuleSet 中的例子。

 

ConditionActivityGroup

在CAG中的每个子活动都被增加了一个“WhenCondition属性”,不指定when条件的子活动只执行一次(相当于有多if else的while循环)。对于整个CAG活动:

如果CAG的UntilCondition的结果为true,那么CAG完成

如果没指定UntilCondition,那么在没有执行子活动,并且每一代子活动的when条件结果都是false时,CAG完成

 

ConditionedActivityGroup 活动首次开始执行时,将计算其 Until 条件。 如果 Until 条件的计算结果为 false,则计算 ConditionedActivityGroup 活动所含的所有第一代子活动的 When 条件。 如果某个活动的 When 条件的计算结果为 true,则计划(所有验证结束以后才执行When条件为true的,并不是验证一个执行一个)行该活动。

 

每次所执行的子活动完成执行时,都会重新计算 ConditionedActivityGroup 活动的 Until 条件,以及所有不处于执行状态的第一代子活动的 When 条件。 只要 ConditionedActivityGroup 活动的 Until 条件计算结果为 true,就会立即取消当前正在执行的所有子活动。

 

Replicator(类似于for each)

该活动只能容纳一个子活动。它的用途是在运行时,复制它内部的子活动,每个活动都运行在自己的AEC中:

具体复制的数量有“InitialChildData属性指定,该属性一般要等到工作流运行时才知道。

运行时,Replicator通过“ChildInitialized和“ChildCompleted事件与其内部的子活动进行数据交换。

必须设置ExecutionType属性。sequenceParallel:前者表示以顺序方式运行子活动,一次一次的创建子活动的实例;后者表示并行执行,一次创建所有实例。

如果设置了UntilCondition属性,那么当它为true的时候(每次创建子活动之前,都会验证该条件),Replicator就会结束。

提示:在运行这个例子的时候,可以把ExecutionType改成Parallel,看看区别

 

SynchronizationScope

具有相同排他标记的分支相对于具有其他不同排他标记来说是相对独立的运行集合

只有一组相同排他标记的所有活动都运行完毕以后,下一组具有相同排他标记的集合才会执行

示例:

 

如果没有设置 SynchronizationHandles   属性或者设置了不同的 SynchronizationHandles   属性,则执行结果如下:

 

两个分支设置了相同的SynchronizationHandles ,那么执行结果如下:

转载于:https://www.cnblogs.com/bhsc881114/archive/2009/05/10/1453698.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值