This is more of a general question regarding the asynchronous patterns in C# .NET described on MSDN here.
When a long running synchronous operation is required to be called (eg - WCF, DB query, IO, etc), and I don't want the thread to block (eg - GUI thread), does this mean that there must exist another thread somewhere that does the blocking?
Does making a synchronous call asynchronous necessarily require a thread somewhere to block?
So, if I make 10 long-running async calls (which are actually 10 synchronous calls), must there be 10 threads out there doing the waiting? Or is there a mechanism to prevent 10 threads from being blocked?
In WCF, you can create Begin and End methods for a WCF call to make it asynchronous. Does this mean that when I call this asynchronous method, there is a thread somewhere, either on the client or the server, that does the waiting for me?
I have read several articles about varying methods to achieve asynchrony, but these articles don't explain what is done under the hood.
Update
I made my question more specifc, since I'm more about interested in the .NET. async patterns described by MSDN.
Update 2
I reformed the question to be even more specific to making synchronous calls asynchronous.
