/// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="task"></param>
        /// <param name="parabll"></param>
        public WorkingTask(Task task, BLL.IBLLLogic parabll, DateTime paraLastRunDate)
        {
            _Task = task;

            #region 根据任务的不同构造不同的任务执行者
            this._Worker = Factory.GetWorker(this, parabll, _Task.TaskAssembly.AssemblyType);
            #endregion

            _LastRunTime = paraLastRunDate;
            if (_Task.TaskEntity.DateEnd < DateTime.Now)
            {
                _RunState = TaskRuningState.OutTime;
            }
            else
            {
                _RunState = TaskRuningState.Waite;
            }
            this.RebuildTaskRunTimeList();
        }
 /// <summary>
 /// 更新下次执行时间
 /// </summary>
 private void UpdateNextRunTime()
 {
     if (_RunTimeList.Count > 0)
     {
         _NextRunTime = _RunTimeList.Dequeue();
     }
     else
     {
         _NextRunTime = DateTime.MaxValue;
         _RunState = TaskRuningState.OutTime;
     }
 }
        /// <summary>
        /// 通知,任务已经开始
        /// </summary>
        public void Notify_WorkStarted()
        {
            _RunState = TaskRuningState.Runing;
            _LastRunTime = DateTime.Now;

            //如果队列中还有需要执行的日期,则取出一个
            UpdateNextRunTime();

            //如果没有过期,并且时间队列还没有结束,则继续构建
            if (_RunState != TaskRuningState.OutTime &&
                !this._IsTimeQueueEnd &&
                _RunTimeList.Count == 0) //暂定小于5的时候开始构建
            {
                this.BuildTimeQueueByLastRunTime();
            }
        }
        /// <summary>
        /// 重构构建任务执行的时间列表
        /// [对任务有更新的时候重新构建]
        /// </summary>
        private void RebuildTaskRunTimeList()
        {
            //因为是更新,所以需要重新设置状态,后面再去计算
            _RunState = TaskRuningState.Waite;

            _IsTimeQueueEnd = false;
            _RunTimeList.Clear();

            this.BuildTimeQueueByLastRunTime();

            UpdateNextRunTime();
        }
 /// <summary>
 /// 通知,任务已经完成
 /// </summary>
 public void Notify_WorkComplete()
 {
     if (_Task.TaskEntity.DateEnd < DateTime.Now)
     {
         _RunState = TaskRuningState.OutTime;
     }
     else
     {
         _RunState = TaskRuningState.Waite;
     }
 }