本節主要介紹Parallel,Pick,PickBranch,ParallelForEach<T> 的使用.
本文例子下載:
http://files.cnblogs.com/foundation/controlActivitySample2.rar
本文例子說明
控制流Activity
Parallel 並行容器
類名 System.Activities.Statements.Parallel 文件 System.Activities.dll 結構說明 繼承 NativeActivity
例:基本使用
1.在流程中添加[WriteLine]打印當前時間
2.添加[Parallel],並添加兩個分支
第一個分支添加[Delay]延時 10秒, 添加[WriteLine]打印當"A"
第二個分支添加[Delay]延時 15秒, 添加[WriteLine]打印當"B"
3.在流程中添加[WriteLine]打印當前時間
預期:兩次的系統時間差為15秒表示為並行, 兩次的系統時間差為25秒表示為串行
流程 宿主 WorkflowInvoker.Invoke(new ParallelWorkflow()); 結果例:CompletionCondition 說明
1.在流程中添加bool 型變量[myVariable],默認值False
2.添加[Parallel],並添加三個分支
第一個分支: 添加[WriteLine]打印當"A1" ;添加[Delay]延時 10秒;添加[WriteLine]打印當"A2"
第二個分支: 添加[WriteLine]打印當"B1" ;添加[Delay]延時 15秒;添加[WriteLine]打印當"B2" ; 添加 [Assign]為變量[myVariable]賦值True
第三個分支: 添加[WriteLine]打印當"C1" ;添加[Delay]延時 20秒;添加[WriteLine]打印當"C2"
預期: [Assign]為變量[myVariable]賦值True後,容器結束,因此會依次看到[A1,B1,C1,A2,B2],但看不到[C2]
流程 宿主 WorkflowInvoker.Invoke(new ParallelCompletionConditionWorkflow()); 結果
Pick,PickBranch 觸發容器
Pick
類名 System.Activities.Statements.Pick 文件 System.Activities.dll 結構說明 繼承 NativeActivityPickBranch
類名 System.Activities.Statements. PickBranch 文件 System.Activities.dll 結構說明 繼承 Object功能說明
1. [Pick]觸發容器,提供了基於事件的控制流。 [Branches]集合是觸發容器的分支集合,只能添加[PickBranch]
2. [Pick]觸發容器中可以定義變量
3. [PickBranch] 只可添加到[Pick]中,[PickBranch.Trigger]只能放入觸發類Activity,[PickBranch.Action] 當 [PickBranch.Trigger] 被觸發時,所要執行的Activity
4.只要有一個[PickBranch]的[Trigger]被觸發,其他[PickBranch]就不會被觸發了
5.即使在被執行的[PickBranch]還沒完成時,其他[PickBranch]也不會被觸發
例:基本使用
1.在工作流中添加[WriteLine],打印系統時間
2.在工作流中添加[Pick],添加三個[PickBranch]
第一個分支: [Trigger]添加[Delay]延時 15秒
[Action]添加[WriteLine]打印當"A"
第二個分支: [Trigger]添加[Delay]延時 10秒
[Action]添加[WriteLine]打印當"B1"
添加[Delay]延時 15秒
添加[WriteLine]打印當"B2"
第三個分支: [Trigger]添加[Delay]延時 20秒
[Action]添加[WriteLine]打印當"C"
預期:只有第二個分支會被執行
流程 宿主 WorkflowInvoker.Invoke(new PickWorkflow()); 結果ParallelForEach<T> 循環
類名 System.Activities.Statements.ParallelForEach<T> 文件 System.Activities.dll 結構說明 繼承 NativeActivity
例:基本使用
1. 創建一code activity 名為[CollectionActivity],
具有[Out]參數,類型為List<string>的參數[myOutCollection]
2. 在流程中添加List<string>變量[myCollection]
3. 在流程中添加[CollectionActivity],將[CollectionActivity.myOutCollection]參數綁定到 [myCollection] 變量
4. 在流程中添加[ForEach<T>],[TypeArgument]屬性指定[string]
[Values] 屬性綁定到 [myCollection] 變量
在[Body]中添加[writeLine],打印[item]
CollectionActivity
public sealed class CollectionActivity : CodeActivity
{
public OutArgument<System.Collections.Generic.List<string>> myOutCollection { get; set; }
protected override void Execute(CodeActivityContext context)
{
System.Collections.Generic.List<string> list = new List<string>();
list.Add("wxd");
list.Add("lzm");
list.Add("wxwinter");
context.SetValue (this.myOutCollection,list );
}
}
流程
宿主
WorkflowInvoker.Invoke(new ParallelForEachWorkflow());
結果