/// <summary> /// Removes task from queue /// </summary> public void RemoveTaskFromQueue(Task task) { lock (_taskQueue) { if (_taskQueue.Remove(task)) { TaskRemovedFromQueue?.Invoke(this, new TaskEventArgs(task)); } } }
/// <summary> /// Enqueues a task for execution /// </summary> public void EnqueueTask(Task task) { // Enqueue lock (_taskQueue) { _taskQueue.Add(task); TaskAddedToQueue?.Invoke(this, new TaskEventArgs(task)); } // If not busy - pop queue straight away TryPopQueue(); }
/// <summary> /// Aborts the execution of the given task if it's running or removes it from the queue if it's enqueued /// </summary> public void AbortTask(Task task) { lock (_taskQueue) { // Current task if (Task == task) { AbortCurrentTask(); } // Tasks in queue RemoveTaskFromQueue(task); } }