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