我期待更好地了解异步编程模型。让我们假设在下面称为Web服务需要1秒钟,返回:异步编程模型和应用程序规模
async Task<int> AccessTheWebAsync()
{
HttpClient client = new HttpClient();
string urlContents = await client.GetStringAsync("http://service.com");
return urlContents.Length;
}
它是正确的说,当await
与异步方法使用当前线程产生回线程池的其他工作?是否使用异步模型为每个请求节省了1秒的工作时间,因为该线程并未等待Web服务响应?
定义'节省1秒的工作'。每个请求都是一秒钟吗?多线程永远不会保存你的工作。同样的工作总是要进行。但是,它可以节省您的时间。 – Gusdor
一般来说,这意味着线程可以用于其他工作。异步'GetStringAsync'方法使用异步I/O回调,所以它甚至不需要使用新线程。换句话说,在一个I/O绑定的应用程序中,拥有更多的线程根本没有帮助。异步调用'AccessTheWebAsync' 100次将意味着它将花费大约1秒钟的时间,而不是在一个线程中同步完成100秒。 – Luaan
@Gusdor通过储蓄,我的意思是一个线程不会花费一些时间而不做有用的工作,因为它正在等待某些事情做出回应。 –