public void Cancel(Guid taskId) { if (CurrentTasks.ContainsKey(taskId)) { var ea = new TaskmanagerEventArgs() { Task = new TaskBase() { UniqueId = taskId } }; CancellingTask(this, ea); var value = CurrentTasks[taskId]; TaskEntry s = new TaskEntry(); s.State = "cancelled"; s.Message = "Cancelled by user"; s.UniqueId = value.UniqueId; s.Description = value.TaskDescription; ; s.Name = value.Name; s.TimeStamp = value.TimeStamp; ProcessedTasks.TryAdd(s.UniqueId, s); value.Cancel(); ITask irt; if (CurrentTasks.TryRemove(s.UniqueId, out irt)) { ea.Task = irt; CancelledTask(this, ea); irt.Dispose(); } } else if (QueuedTasks.ContainsKey(taskId)) { TaskEntry te; if (QueuedTasks.TryRemove(taskId, out te)) { te.State = "cancelled"; te.Message = "Cancelled by user"; ProcessedTasks.TryAdd(te.UniqueId, te); } } }
private void manageTask(ITask value) { StartingTask.Raise(this, new TaskmanagerEventArgs() { Task = value }); TaskEntry entry; if (QueuedTasks.TryGetValue(value.UniqueId, out entry)) { if (entry.State == "pending") { Exception exception = null; try { CurrentTasks.TryAdd(value.UniqueId, value); TaskEntry s; QueuedTasks.TryRemove(value.UniqueId, out s); StartedTask.Raise(this, new TaskmanagerEventArgs() { Task = value }); value.Run(); } catch (Exception ex) { exception = ex; Log.Error(ex.ToString()); TaskEntry s; QueuedTasks.TryRemove(value.UniqueId, out s); s.State = "error"; s.Message = ex.ToString() + "\n " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString(); s.UniqueId = value.UniqueId; s.Description = value.TaskDescription; ; s.Name = value.Name; s.TimeStamp = value.TimeStamp; ProcessedTasks.TryAdd(s.UniqueId, s); ITask irt; CurrentTasks.TryRemove(s.UniqueId, out irt); } finally { var ea = new TaskmanagerEventArgs() { Task = value, Exception = exception }; EndingTask.Raise(this, ea); TaskEntry s; QueuedTasks.TryRemove(value.UniqueId, out s); s.State = "completed"; s.Message = "Completed on: " + DateTime.Now.ToString(); s.UniqueId = value.UniqueId; s.Name = value.Name; s.Description = value.TaskDescription; s.TimeStamp = value.TimeStamp; ProcessedTasks.TryAdd(s.UniqueId, s); ITask irt; CurrentTasks.TryRemove(s.UniqueId, out irt); if (exception == null) value.End(); EndedTask.Raise(this, ea); value.Dispose(); } } else { TaskEntry s; QueuedTasks.TryRemove(value.UniqueId, out s); ProcessedTasks.TryAdd(s.UniqueId, s); value.Cancel(); } } }
public void Add(ITask task) { var ea = new TaskmanagerEventArgs() { Task = task }; AddingTask.Raise(this, ea); var t = task; t.TimeStamp = DateTime.Now; t.UniqueId = Guid.NewGuid(); TaskEntry te = new TaskEntry(); te.State = "pending"; te.UniqueId = t.UniqueId; te.User = "******"; te.TimeStamp = t.TimeStamp; te.Name = t.Name; te.Message = "Awaiting processing."; te.Description = task.TaskDescription; //Display of queued items: QueuedTasks.TryAdd(t.UniqueId, te); t.OnStatusChange += new EventHandler<TaskEventArgs>(value_OnStatusChange); //Processing the tasks: if (t.ByPassQueue) { if (secondaryTasks.TryAdd(t)) AddedTask.Raise(this, ea); } else { if (tasks.TryAdd(t)) AddedTask.Raise(this, ea); } }