0

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

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

4

1 回答 1

2

如果您只是将阻塞调用包装在 a 中Task.Run,那么您是对的:没有任何好处。

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

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

于 2013-01-31T13:15:42.523 回答