如果我有一个Web应用程序在Task<T>
中包含对网络和数据库的调用并等待它们,这应该可以阻止线程阻塞,以便可以重复使用它。
但是,当执行IO工作时,是否还有一些线程被阻止,所以等待没有真正的好处?
答案 0 :(得分:2)
如果您只是在Task.Run
中打包阻止来电,那么您是对的:没有任何好处。
但是,如果您使用自然异步方法(例如,异步HttpClient
/ WebClient
/ HttpWebRequest
方法和异步数据库方法),那么这些请求不会使用任何线程,并获得可扩展性优势。
在Windows的设备驱动程序级别,所有I / O都是异步的。同步API只是便利包装器。自然异步方法不会阻塞同步API上的线程;它们构建在异步API上。