在C#.NET中,异步操作是否必然会创建一个阻塞的线程?

Mas*_*Mas 7 .net multithreading asynchronous

这是关于MSDN上描述的C#.NET中的异步模式的一般性问题.

当需要调用长时间运行的同步操作(例如--WCF,DB查询,IO等),并且我不希望线程阻塞(例如 - GUI线程)时,这是否意味着必须存在另一个线程哪个地方阻挡?

使异步同步调用必然需要一个线程来阻塞吗?

那么,如果我进行10次长时间运行的异步调用(实际上是10次同步调用),那么必须有10个线程在那里进行等待吗?或者是否有一种机制可以防止10个线程被阻塞?

在WCF中,您可以为WCF调用创建Begin和End方法,以使其异步.这是否意味着当我调用这个异步方法时,在客户端或服务器上的某个地方有一个线程可以等待我吗?

我已经阅读了几篇关于实现异步的不同方法的文章,但是这些文章没有解释在幕后做了什么.

更新

我提出了更具体的问题,因为我更关心.NET.MSDN描述的异步模式.

更新2

我将这个问题改为更具体,使同步调用异步.

VS1*_*VS1 7

.NETFramework中,有许多方法可以实现异步操作:使用线程,线程池,BeginXxx和EndXxx方法,基于事件的APM或基于任务的APM.

每个异步模式都有自己的内部实现,所有这些异步编程模型都在本博客文章中进行了解释,包括传统的BeginXxx和EndXxx异步模式.

以下是所有异步模式的摘要,以供快速参考: 异步摘要:

此外,Jeffrey Richter还很好地解释了MSDN杂志中的CLR异步编程模型.