title: .NET Reverse Semaphore?
body: <p>Perhaps it's too late at night, but I can't think of a nice way to do this.</p>
  
  <p>I've started a bunch of asynchronous downloads, and I want to wait until they all complete before the program terminates. This leads me to believe I should increment something when a download starts, and decrement it when it finishes. But then <strong>how do I wait until the count is 0</strong> again?</p>
  
  <p>Semaphores sort of work in the opposite way in that you block when there are no resources available, not when they're <em>all</em> available (blocks when count is 0, rather than non-zero).</p>