public bool EnableTask(string id, int timeout = 10000) { PtiEventer addTaskEvent = null; var r = EventManager.Get().RegEventAndWait <string>(ptievent => { var task = this.TaskPool.Where(i => i.PtiTasker._id == id).FirstOrDefault(); if (task != null) { task.PtiTasker.Enable = true; return("1"); } else { var _t = DBManager.Get().GetTaskById(id); if (_t == null) { return(null); } _t.Enable = true; var immediately = false; if (string.IsNullOrWhiteSpace(_t.Schedule)) { immediately = true; } addTaskEvent = this.AddTask(_t, null, immediately); return("1"); } }, PtiEventType.DisableTask); if (addTaskEvent != null) { EventManager.Get().WaitEvent <object>(addTaskEvent); } return(r != null); }
/// <summary> /// App Cleaner 定时清理已删除的APP(清除时先判断是否有对应任务在运行)TODO /// </summary> /// <param name="value"></param> /// <returns></returns> public object Cleaner(PtiEventer value) { WriteInfo("AppCleaner Running"); return(true); }
/// <summary> /// 循环遍历所有任务,检查可执行的并且执行 /// </summary> /// <param name="value"></param> /// <returns></returns> public object CheckAllTasksEvent(PtiEventer value) { DateTime now = DateTime.Now; foreach (var runtask in this.TaskPool) { try { //判断是否已经禁用任务,从内存中删除任务 if (!runtask.PtiTasker.Enable) { this.RemoveList.Add(runtask); continue; } //判断任务运行是否已经超时 if (runtask.PtiTasker.TimeOutSeconds > 0) { if ((runtask.LastRunDate - now) >= TimeSpan.FromSeconds(runtask.PtiTasker.TimeOutSeconds)) { if (!RunnerManager.Get().CheckTaskAndKill(runtask.PtiTasker)) { WriteWarning($"Task {runtask.PtiTasker._id}({runtask.PtiTasker.TaskName}) Kill Failure!"); } } } //判断启动时间启动任务 if (now >= runtask.NextRunDate) { if (!RunnerManager.Get().CreateAndStart(runtask)) { WriteWarning($"Task {runtask.PtiTasker._id}({runtask.PtiTasker.TaskName}) Start Failure!"); } //没有任务计划的为一次性任务,执行后标记为失效 if (string.IsNullOrWhiteSpace(runtask.PtiTasker.Schedule)) { runtask.PtiTasker.Enable = false; } else { runtask.NextRunDate = Schedule.CalculateDateScheduleFromNow(runtask.PtiTasker.Schedule); } } } catch (Exception e) { WriteError(e.ToString()); } } foreach (var removetask in this.RemoveList) { //立即更新任务 DBManager.Get().SaveTask(removetask.PtiTasker); //如果任务还在运行 if (RunnerManager.Get().TaskExist(removetask.Runner)) { continue; } //在内存中移除任务 if (!this.TaskPool.Remove(removetask)) { WriteWarning($"Task {removetask.PtiTasker._id}({removetask.PtiTasker.TaskName}) remove failure!"); } } this.RemoveList = new List <PtiRunTask>(); WriteInfo("Check All Tasks Success"); return(true); }
/// <summary> /// 将任务同步至数据库 /// </summary> /// <param name="value"></param> /// <returns></returns> public object SyncDatabaseEvent(PtiEventer value) { DBManager.Get().SaveAllTasksAndApps(this.TaskPool); WriteInfo("Database Synchronized!"); return(true); }