/// <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; } }