title: what's the proper way to use a ThreadPool?
body: <p>If my understanding of the way the ThreadPool works is correct, one of its purposes is to limit the number of worker threads within a process that can be created at a given time. For example, if you set MaxThreads to 5 and then call QueueUserWorkItem 30 times, 30 requests will be made to the ThreadPool, but only 5 of those requests will be serviced by a new thread, while the other 25 requests will be added to the queue and serviced one at time as previous requests complete and existing threads becomes available.</p>
  
  <p>In the code below, however, the call to Thread.Sleep(-1) guarantees that the DoSomething() method will never return, meaning that the current thread will never become available to subsequent requests.</p>
  
  <p>But my understanding of the way a ThreadPool works cannot be correct, because if it were correct the code below would print only the numbers 0-4, rather than 0-29.</p>
  
  <p>Can someone please explain how the ThreadPool works and why the below code isn't doing what I thought it should be doing?</p>
  
  <pre><code>    static void DoSomething(object n)
      {
          Console.WriteLine(n);
          Thread.Sleep(-1);
      }
  
      static void Main(string[] args)
      {
          ThreadPool.SetMaxThreads(5, 5);
          for (int x = 0; x &lt; 30; x++)
          {
              ThreadPool.QueueUserWorkItem(new WaitCallback(DoSomething), x);
          }
          Console.Read();
      }
  </code></pre>