public static DispatchConcurrentQueue GlobalQueue()
 {
     if (sGlobalQueue == null)
     {
         sGlobalQueue = new DispatchConcurrentQueue("Global Queue", 4);
     }
     return(sGlobalQueue);
 }
 public static void SyncGlobal(Action task, Priority priority = Priority.Normal)
 {
     DispatchConcurrentQueue.GlobalQueue().Sync(task, priority);
 }
        public static void Run()
        {
            DispatchConcurrentQueue dcq = DispatchConcurrentQueue.GlobalQueue();

            dcq.Suspend();

            dcq.Async(() => {
                Console.WriteLine("Starting Task High");
                Thread.Sleep(1000);
                Console.WriteLine("Finish Task High");
            }, Dispatch.Priority.High);

            dcq.Async(() => {
                Console.WriteLine("Starting Task Lowest");
                Thread.Sleep(1000);
                Console.WriteLine("Finish Task Lowest");
            }, Dispatch.Priority.Lowest);

            dcq.Async(() => {
                Console.WriteLine("Starting Task 1");
                Thread.Sleep(1000);
                Console.WriteLine("Finish Task 1");
            });

            dcq.Async(() => {
                Console.WriteLine("Starting Task 2");
                Thread.Sleep(1000);
                Console.WriteLine("Finish Task 2");
            });

            dcq.Async(() => {
                Console.WriteLine("Starting Task 3");
                Thread.Sleep(1000);
                Console.WriteLine("Finish Task 3");
            });

            dcq.Async(() => {
                Console.WriteLine("Starting Task 4");
                Thread.Sleep(1000);
                Console.WriteLine("Finish Task 4");
            });

            dcq.Async(() => {
                Console.WriteLine("Starting Task 5");
                Thread.Sleep(1000);
                Console.WriteLine("Finish Task 5");
            });

            dcq.Async(() => {
                Console.WriteLine("Starting Task Highest");
                Thread.Sleep(1000);
                Console.WriteLine("Finish Task Highest");
            }, Dispatch.Priority.Highest);

            dcq.Resume();

            Console.WriteLine("Waiting on Sync");
            dcq.Sync(() => {
                Console.WriteLine("Sync");
            }, Dispatch.Priority.Lowest);
            Thread.Sleep(100000000);
        }