In my last few posts, I covered building an AsyncManualResetEvent, an AsyncAutoResetEvent, an AsyncCountdownEvent, and an AsyncBarrier. In this post, I’ll cover building an AsyncSemaphore class.Semaphores have a wide range of applicability. They’re great for throttling, for protected access to a limited set of resources...