活动 | 描述 | 设计器外观 |
集合管理 | ||
AddToCollection<T> | 向Collection中添加 Item。 | ![]() |
RemoveFromCollection<T> | 将Item 从Collection中移除。 | ![]() |
ClearCollection<T> | 清空Collection,将其中存储的所有子项都移除。 | ![]() |
ExistsInCollection | 验证中Collection是否存在Item 。如果子项存在,活动的Result 参数就会被赋值为True。 | ![]() |
流控制 | ||
If | If活动会根据一个Boolean类型的表达式来执行一个子活动。 如果Boolean 表达式-Condition 计算为 True (并且配置了Then活动),就会计划执行Then”活动。如果表达式计算为False(并且设置了Else活动),就会计算Else活动。 | ![]() |
DoWhile | 重复执行其 Body 直到 Condition 计算为 True。Body至少会执行一次。 | ![]() |
ForEach / ForEach<T> | ForEach活动包含一个Values 列表以及一个Body。在运行时,该列表会进行被循环,并且Body会为列表中的每一个值都执行一次。 | ![]() |
Pick | Pick活动在WF中提供了基于事件的流控制模型。 Pick唯一有效的子活动是PickBranches。 在Pick开始执行时,其Branches 的所有Trigger活动都会被计划执行。当第一个Trigger完成了其计划执行的相应Action活动之后,所有其他Trigger活动就都会被取消。 | ![]() |
PickBranch | PickBranch表示Pick活动的一个分支。它由Trigger 和Action组成。PickBranch 只能被添加到Pick活动中。 | ![]() |
Sequence | Sequence活动允许一个或多个 Activities按照顺序执行。 | ![]() |
Switch<T> | Switch活动和c#的switch 语句很像。它包含一个Expression 和一组Cases (每个case都有一个键和一个活动)。当表达式计算完后,Switch活动就会查找匹配表达式结果的 Case,如果找到,就执行与该Case相关联的活动。 | ![]() |
While | 当Boolean类型Condition 的计算为True时,While 活动就执行其 Body。 | ![]() |
并行执行 | ||
Parallel | Parallel活动允许它的子活动并行执行。它会在开始执行时计划其Branches 集合中的每一个WorkflowElement的执行。当所有Branches都完成或其CompletionCondition 属性计算为True时,它就会完成执行。 | ![]() |
ParallelForEach / ParallelForEach<T> | ParallelForEach 活动会遍历其Values集合并为该集合中的每一个元素都执行一个 Activity,它的执行方式和ForEach很像。主要的区别是嵌入的语句是以并行模式执行的。 就像Parallel活动那样,ParallelForEach也有一个 CompletionCondition,所以 ParallelForEach 活动可以提前完成,条件是CompletionCondition返回True。 CompletionCondition会在每次迭代完成后进行计算。 | ![]() |
错误处理 | ||
TryCatch | TryCatch 活动类似于c#中的try..catch 结构:所有位于Try块中的的活动都会被执行,如果发生了异常,就会计划执行最为匹配的Catch 块(如果没有发现匹配的Catch,工作流就会被中断)。所有Catch块都位于一个名为Catches的集合中。 TryCatch活动还有一个Finally 块,它会在Try(以及可能执行的Catch)之后执行。 关于未被处理的异常的提示: TryCatch 提供了工作流级别的异常处理机制。当抛出未被处理的异常时,工作流就会被中断,因此Finally块也就不会被执行。此行为也和c#中的Try..Catch结构保持一致。 | ![]() |
Catch<T> | 表示用于 TryCatch活动中的一个Catch。如果Try元素中抛出了一个异常,TryCatch就会尝试根据抛出异常的类型来寻找一个与之匹配的 Catch 元素。 Catch<T>只能用于TryCatch活动中。 | ![]() |
Throw | Throw 活动会在工作流中抛出一个异常。Throw 活动包含一个Exception 属性,该属性包含了将会在执行时抛出的异常。 | ![]() |
实用工具 | ||
Assign | Assign活动会将其Value 参数的值赋值给其To 参数。 这两个参数的类型必须是兼容的。这种兼容性会在运行期间进行验证。 | ![]() |
Delay | Delay活动,顾名思义,会将当前工作流的执行阻止一段时间,这段时间是由用户通过其Duration参数指定的。延时过期后,工作流就会继续执行。Delay的延时应该被设置为一个TimeSpan值。 | ![]() |
InvokeMethod / InvokeMethod<T> | InvokeMethod 是一个允许我们调用一个现有的CLR方法和静态方法的活动。想要调用一个方法,我们所需要做的就是提供方法的所有者信息(静态方法为TargetType ,实例方法为TargetObject )、 MethodName以及该方法的Parameters。 InvokeMethod支持下面几种方法调用场景: 公共的实例方法和静态方法 通过值或引用传递的参数 对参数数组的支持 对泛型参数的支持 异步方法调用 | ![]() |
WriteLine | 将文本输出到配置好的输出控制台中。 输出到System.Console的背后: WriteLine 有一个TextWriter 参数,它可以配置为不同的输出。例如,我们可以将TextWriter属性配置为发送文本到ASP.NET 页面。如果没有设置TextWriter ,就会选用其默认值-System Console。 | ![]() |
高级(取消、补偿、事务以及持久性) | ||
CancellationScope | CancellationScope 活动包含两个主要部分,Body 和 CancelHandler。Body包括正常执行的活动。如果活动被取消,就会执行CancelHandler。 | ![]() |
CompensatableActivity | CompensableActivity用来定义一个可能长期运行的活动,同时还会伴随着 Compensation 和 Confirmation 逻辑。 Compensation 允许用户指定执行纠正操作的活动,该活动将会在Body 成功完成之后执行。 | ![]() |
Compensate | Compensate用来显式地调用CompensableActivity的补偿处理程序。 | ![]() |
Confirm | Confirm用来显式地调用CompensableActivity的确认处理程序。 | ![]() |
Persist | 持久化工作流实例。会根据执行中的WorkflowInstancethe (此活动不包含任何参数)的配置来完成工作流的持久性。 | ![]() |
TransactionScopeActivity | TransactionScopeActivity 提供了初始化新事务、构建事务处理环境(一个工作流执行属性)以及在TransactionScope活动的Body 完成之后调用事务的完成操作。 TransactionScopeActivity 支持“要求”语义。如果已经有一个环境事务在使用中,否则就创建一个新的事务。 嵌套的事务范围 TransactionScopeActivity 可以嵌套于另一个TransactionScopeActivity中。一个嵌套于另一个TransactionScopeActivity 中的TransactionScopeActivity 将会使用现有的事务。 | ![]() |