使用c#5 async进行非阻塞

时间:2013-01-31 11:36:47

标签: c# async-await c#-5.0

如果我有一个Web应用程序在Task<T>中包含对网络和数据库的调用并等待它们,这应该可以阻止线程阻塞,以便可以重复使用它。

但是,当执行IO工作时,是否还有一些线程被阻止,所以等待没有真正的好处?

1 个答案:

答案 0 :(得分:2)

如果您只是在Task.Run中打包阻止来电,那么您是对的:没有任何好处。

但是,如果您使用自然异步方法(例如,异步HttpClient / WebClient / HttpWebRequest方法和异步数据库方法),那么这些请求不会使用任何线程,并获得可扩展性优势。

在Windows的设备驱动程序级别,所有I / O都是异步的。同步API只是便利包装器。自然异步方法不会阻塞同步API上的线程;它们构建在异步API上。