title: Are Socket.*Async methods threaded?
body: <p>I'm currently trying to figure what is the best way to minimize the amount of threads I use in a TCP master server, in order to maximize performance.</p>
  
  <p>As I've been reading a lot recently with the new async features of C# 5.0, asynchronous does not necessarily mean multithreaded. It could mean separated in smaller chunks of finite state objects, then processed alongside other operations, by alternating. However, I don't see how this could be done in networking, since I'm basically "waiting" for input (from the client).</p>
  
  <p>Therefore, I wouldn't use ReceiveAsync() for all my sockets, it would just be creating and ending threads continuously (assuming it <em>does</em> create threads).</p>
  
  <p>Consequently, my question is more or less: what architecture can a master server take without having one "thread" per connection?</p>
  
  <p>Side question for bonus coolness points: Why is having multiple threads bad, considering that having an amount of threads that is over your amount of processing cores simply makes the machine "fake" multithreading, just like any other asynchronous method would?</p>