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);
            }
        }
Esempio n. 2
0
        //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);
        }