Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
如果我有一个 Web 应用程序将对网络和数据库的调用包装在 a 中Task<T>并等待它们,这应该可以防止线程阻塞,以便可以重用它。
Task<T>
但是,在进行 IO 工作时,是否还有一些线程被阻塞,所以等待并没有真正的好处?
如果您只是将阻塞调用包装在 a 中Task.Run,那么您是对的:没有任何好处。
Task.Run
但是,如果您使用的是自然异步方法(例如,异步HttpClient//方法WebClient和HttpWebRequest异步数据库方法),那么这些请求不会使用任何线程,并且您会获得可伸缩性优势。
HttpClient
WebClient
HttpWebRequest
在 Windows 的设备驱动程序级别,所有 I/O 都是异步的。同步 API 只是方便的包装器。自然异步方法不会阻塞同步 API 上的线程;它们建立在异步 API 之上。