private static Task Dequeue() { lock (lockAllQueue) { LinkedList <Task> queue; if (HighPriorityQueue.Count > 0) { queue = HighPriorityQueue; } else if (MediumPriorityQueue.Count > 0) { queue = MediumPriorityQueue; } else if (LowPriorityQueue.Count > 0) { queue = LowPriorityQueue; } else { throw new InvalidOperationException("No items in TaskQueue"); } Task task = queue.First.Value; queue.RemoveFirst(); itemsInQueue.Decrement(); return(task); } }
public static void RunPriorityQueue(object nil) { try { Task task = Dequeue(); itemsInProgress.Increment(); task.Execute(null); } catch (Exception e) { Logger.Warn("Error while task execution", e); } finally { itemsInProgress.Decrement(); } }