public virtual void UnDo(ExecuteUnit unit)
 {
     if (!statusDic.ContainsKey(unit))
     {
         statusDic[unit] = new UnitStatus();
     }
 }
        public virtual void Execute(ExecuteUnit unit)
        {
            if (!statusDic.ContainsKey(unit))
            {
                statusDic[unit] = new UnitStatus();
            }

            switch (statusDic[unit].statu)
            {
            case ExecuteStatu.UnStarted:
                ExecuteOnUnStarted(unit);
                break;

            case ExecuteStatu.Executing:
                ExecuteOnExecuting(unit);
                break;

            case ExecuteStatu.Completed:
                ExecuteOnCompleted(unit);
                break;

            default:
                break;
            }
        }
        /// <summary>
        /// 结束一组执行
        /// </summary>
        /// <param name="unit"></param>
        protected void CompleteExecuteChildGroups(ExecuteUnit unit)
        {
            var childs = unit.childUnits.ToArray();

            foreach (var list in childs)
            {
                foreach (var item in list)
                {
                    if (!statusDic.ContainsKey(item))
                    {
                        statusDic[item] = new UnitStatus();
                    }

                    if (statusDic[item].statu != ExecuteStatu.Completed)
                    {
                        stateMechine.Complete(item);
                    }
                }
            }
        }