如果需要同時執(zhí)行多個過程相同的而輸入不同的流程陈辱,可以使用ForEach控制語句,一定要注意细诸,這里的ForEach不是循環(huán)沛贪,不是一個流程執(zhí)行完再執(zhí)行另一個流程,我們?nèi)匀皇褂们懊娑x的簡單的步驟來組織ForEach示例流程,代碼如下:
using System;
using System.Collections.Generic;
using System.Text;
using WorkflowCore.Interface;
using WorkflowCore.Models;
using ZL.WorflowCoreDemo.InputDataToStep.Steps;
namespace ZL.WorflowCoreDemo.Paralle
{
public class ParalleWorkflow : IWorkflow
{
public string Id => "ParalleWorkflow";
public int Version => 1;
public void Build(IWorkflowBuilder<object> builder)
{
builder
.StartWith(context => { Console.WriteLine("開始"); ExecutionResult.Next(); })
.ForEach(data => new List<string>() { "張三", "李四", "王五", "趙六" })
.Do(x => x
.StartWith<HelloWithName>()
.Input(step => step.Name, (data, context) => context.Item as string)
.Then<GoodbyeWithName>()
.Input(step => step.Name, (data, context) => context.Item as string)
)
.Then(context => { Console.WriteLine("結(jié)束"); ExecutionResult.Next(); });
}
}
}
在這個例子里利赋,我們沒有定義相關(guān)的數(shù)據(jù)類嗅义,需要輸入的人名作為ForEach中的循環(huán)變量,這些變量保存在context中隐砸,輸入到相應(yīng)的環(huán)節(jié)中。執(zhí)行代碼如下:
IServiceProvider serviceProvider = ConfigureServices();
var host = serviceProvider.GetService<IWorkflowHost>();
host.RegisterWorkflow<ParalleWorkflow>();
host.Start();
host.StartWorkflow("ParalleWorkflow", 1, null);
Console.ReadLine();
host.Stop();
例子的執(zhí)行效果如下:
圖片.png