private void DoProcess(object state) { Thread.Sleep(100); AsyncNodeResult result = (AsyncNodeResult)state; try { if (result.StartNode == null) { return; } WorkflowSolver solver = new WorkflowSolver(); ComponentNode next = solver.SolveComplexComponentTree(result.ComponentList, result.StartNode, result.Batch.ExtraInfo, result.JobCallback, result.Batch, result.Group, result.Job); result.NextNode = next; } catch (Exception ex) { result.Exception = ex; //throw; } finally { OnCompleted(result); } }
//complex solver public static ComponentNode SolveComplexComponentTree(this WorkflowSolver solver, List <ComponentNode> paramList, ComponentNode startNode, ICollection <ExtraProcessInfo> extraProcessInfos, INotificationCallback callback, ProcessBatch batch, ProcessGroup group, ProcessJob job) { ComponentNode nextComponent = null; IEnumerable <ComponentNode> children = ExcuteComplexStartNode(paramList, startNode, extraProcessInfos, callback, batch, group, job); foreach (var componentParam in children) { var comparam = ExcuteComplexComponentNode(paramList, componentParam, callback, batch, group, job); if (nextComponent == null) { nextComponent = comparam; } } return(nextComponent); }