title: Does SemaphoreSlim act as a gatekeeper or as a batchkeeper?
body: <p>Does SemaphoreSlim act as a gatekeeper or as a batchkeeper?</p>
  <p>For example: assuming I have <code>semaphore = new SemaphoreSlim(50, 50);</code>, and suppose I have to perform 1000 tasks.</p>
  <p>Does the <code>semaphore.Wait();</code> or <code>semaphore.WaitAsync();</code> ensure that 50 tasks are processed as a batch - for example - perform 50 tasks, and when all 50 are complete then do the next 50, and so on..</p>
  <p>Or does it act like gatekeeper - for example - perform 50 tasks, then as soon as even 1 task is complete, perform the 51st task, and so on?</p>