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();
     }
 }