title: Are a .NET Task thread's resources returned back to the pool temporarily if the thread is waiting on an async operation to finish?
body: <p>I have a TPL Task that does two things. First, it calls a web service. Second, it inserts some data into a database. I have up to 20 Tasks started at one time doing this same thing over and over again. All they do all day is call web services and insert data into a database.</p>
  
  <p>I'm fairly new to TPL in .NET. I've done some stuff with background worker processes and async web services.</p>
  
  <p>The web service call and the database insert are both blocking calls within the thread the Task is running in.</p>
  
  <p>I understand that under the covers, when you use Tasks, .NET manages a thread pool for you. Yes?</p>
  
  <p>Would the thread pool have more threads at its disposal if I made the service call and database call with async and await() instead of making them blocking calls?</p>
  
  <p>My theory (and I'm not sure why I think this) is that the thread is busy doing nothing while waiting on the blocking web service and can't return its resources temporarily to the pool. But I wonder if the Tasks were waiting for async calls to finish whether the main Task thread would be able to switch to let other stuff process while waiting.</p>
  
  <p>Is my theory right? Or am I making stuff up?</p>
  
  <p>I'm using c# and .NET 4.0, but I could go to 4.5 if needed.</p>