【发布时间】:2014-02-24 15:21:55
【问题描述】:
我希望更好地了解异步编程模型。假设下面调用的 Web 服务需要 1 秒才能返回:
async Task<int> AccessTheWebAsync()
{
HttpClient client = new HttpClient();
string urlContents = await client.GetStringAsync("http://service.com");
return urlContents.Length;
}
当await与异步方法一起使用时,当前线程被让出回线程池做其他工作是否正确?使用异步模型是否会为每个请求节省 1 秒的工作时间,因为该线程不会等待 Web 服务响应?
【问题讨论】:
-
定义
saving 1 second of work。每个请求是否正好是一秒?多线程永远不会节省您的工作量。总是要执行相同的工作。但是,它可以节省您的时间。 -
一般来说,这意味着线程可以用于其他工作。异步
GetStringAsync方法使用异步 I/O 回调,因此它甚至不需要使用新线程。换句话说,在 I/O 绑定的应用程序中,拥有更多线程根本没有帮助。异步调用AccessTheWebAsync100 次意味着将花费或多或少一秒,而不是如果在一个线程中同步完成则需要 100 秒。 -
@Gusdor 通过节省,我的意思是线程不会花费一些时间不做有用的工作,因为它正在等待响应。
标签: c# asynchronous