private static void ExecuteTask(object o) { Timetable.Entry e = o as Timetable.Entry; if (e == null) { return; } UpdateTimeTable(e, true); try { bool success = false; success = true; while (e.Task.ExecuteAsync().Status == TaskStatus.Running) { Thread.Sleep(100); } if (!success && !string.IsNullOrEmpty(e.Task.Error)) { Config.LogWriter.LogMessage(LogLevel.Error, e.Task.Error); e.Task.Revert(); } } finally { UpdateTimeTable(e, false); } }
private async void Dispatch(Timetable.Entry e) { await Configuration.LogWriter.LogMessageAsync(LogLevel.Debug, string.Concat("Spawning execution of task with Id: ", e.Task.Id)); if (e == null) { return; } UpdateTimeTable(e, true); try { bool success = false; success = await e.Task.ExecuteAsync(); if (!success && !string.IsNullOrEmpty(e.Task.Error)) { await Configuration.LogWriter.LogMessageAsync(LogLevel.Error, e.Task.Error); e.Task.Revert(); } } finally { UpdateTimeTable(e, false); } }
private bool CheckIsOnTime(Timetable.Entry e) { bool isOnTime = (ulong)DateTime.Now.Ticks >= e.NextRun; Configuration.LogWriter.LogMessage(LogLevel.Debug, string.Format("Task {0} is {1}on time", e.Task.Id, isOnTime ? "NOT " : string.Empty)); Configuration.LogWriter.LogMessage(LogLevel.Debug, string.Format("Task {0} is {1}running", e.Task.Id, !e.IsExecuting ? "NOT " : string.Empty)); Configuration.LogWriter.LogMessage(LogLevel.Debug, string.Format("Task {0} will {1}run now", e.Task.Id, (!(e.IsExecuting && isOnTime)) ? "NOT " : string.Empty)); return(!e.IsExecuting && (ulong)DateTime.Now.Ticks >= e.NextRun); }
private static void UpdateTimeTable(Timetable.Entry e, bool executing) { ulong currentTicks = 0; e.IsExecuting = executing; currentTicks = (ulong)DateTime.Now.Ticks; if (executing) { e.NextRun = currentTicks + e.Task.Interval; } }
private bool ReadTasksList() { bool result = false; TasksLists = new Timetable(); XmlNode tasks = GetDocumentNode("Tasks"); if (tasks != null && tasks.HasChildNodes) { foreach (XmlNode taskXml in tasks.ChildNodes) { Job t; string taskName = ParseTask(taskXml, out t); Timetable.Entry entry = new Timetable.Entry(); entry.Task = t; TasksLists.Add(entry); } } return(result); }
private static void SpawnExecution(Timetable.Entry e) { Thread thrd = new Thread(ExecuteTask); thrd.Start(e); }
private void Dispatch(Timetable.Entry e) { Configuration.LogWriter.LogMessage(LogLevel.Debug, string.Concat("Spawning execution of task with Id: ", e.Task.Id)); SpawnExecution(e); }