工作流设计
简单的流步骤的创建。
public class FlowStep
{
private int stepId;
private System.Action<System.Action<bool>> action_;
public FlowStep(int pStepId,System.Action<System.Action<bool>> pAction)
{
stepId = pStepId;
action_ = pAction;
}
public void RunAction(System.Action<bool> pFinish)
{
action_.Invoke(pFinish);
}
}
Flowstep RunAction返回True 流继续进行下一步,返回false 中断该流程
简单流的创建
using System.Collections.Generic;
public class Flow
{
private Dictionary<int, FlowStep> steps = new Dictionary<int, FlowStep>();
private int FlowId;
private int curStep = 0;
private int maxStep = 0;
public Flow(int pFlowId)
{
FlowId = pFlowId;
}
public void RunAllStep(System.Action pFinish)
{
curStep = 0;
LoopRunAllStep(pFinish);
}
private void LoopRunAllStep(System.Action pFinish)
{
curStep++;
if (curStep > maxStep)
{
pFinish.Invoke();
}
else
{
if (steps.ContainsKey(curStep))
{
steps[curStep].RunAction((oNext)=> {
if (oNext)
{
LoopRunAllStep(pFinish);
}
else
{
pFinish.Invoke();
}
});
}
else
{
LoopRunAllStep(pFinish);
}
}
}
public void AddStep(int pStepId,System.Action<System.Action<bool>> pAction)
{
var flowStep = new FlowStep(pStepId, pAction);
if (!steps.ContainsKey(pStepId))
{
steps.Add(pStepId,flowStep);
}
if (pStepId > maxStep)
{
maxStep = pStepId;
}
}
}