private static void SemaphoreTests()
        {
            SemaphoreAsync semaphore = new SemaphoreAsync(1);

            for (int nWork = 0; nWork < 2; nWork++)
            {
                int work = nWork;
                Task.Run(() => RunWorker(work, semaphore));
            }


            Console.ReadLine();
        }
        private static async void RunWorker(int nWork, SemaphoreAsync semaphore)
        {
            SynchronizationContext.SetSynchronizationContext(new MySynchronizationContext());
            while (true)
            {
                await semaphore.AquireAsync();//.ContinueWith(t => { });

                Console.WriteLine("{0}:{1},Aquired", nWork, Thread.CurrentThread.ManagedThreadId);
                await Task.Delay(2000);

                //Thread.Sleep(2000);
                Console.WriteLine("{0}:{1}:Releasing", nWork, Thread.CurrentThread.ManagedThreadId);
                semaphore.Release();
                Console.WriteLine("{0}:{1}:Released", nWork, Thread.CurrentThread.ManagedThreadId);
                Thread.Sleep(1000);
            }
        }