title: How do I "WaitMoreThanOne" in a Semaphore?
body: <p>Is there a way I can wait for more than one Release() in a Semaphore?</p>
  
  <p>Say I have something like this:</p>
  
  <pre><code>class GoRunners {
  
      Semaphore runnersSemaphore;
  
      List&lt;Result&gt; results = new List&lt;Result&gt;();
  
      private void RunForestRun(object aRunner) {
          runnersSemaphore.Wait();
          Runner runner = (Runner)aRunner;
          results.Add(runner.Run());
          runnersSemaphore.Release();
      }
  
      private List&lt;Result&gt; Go() {
          List&lt;Runners&gt;() runners = CreateSomeRunners();
          runnersSemaphore = new Semaphore(2, 2); // At most two threads at once
          runners.ForEach((runner) =&gt; new Thread(RunForestRun).Start(runner); )}
          runnersSemaphore.WaitFor(runners.Count); //How do I do this?
          return results;
      }
  }
  </code></pre>
  
  <p>I know I can use multiple <code>WaitOne()</code>s inside the loop, but that just doesn't look good. But if there is no other way, I'm fine with it. If there is another mechanism that achieves what I want that's OK as well (I used to do stuff like this in Java using Semaphores, so my mind went in that direction).</p>
  
  <p><strong>Note: I'm locked in .NET 3.5 :(</strong></p>