MSDN使用以下示例:
async Task<int> AccessTheWebAsync()
{
HttpClient client = new HttpClient();
Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
DoIndependentWork();
string urlContents = await getStringTask;
return urlContents.Length;
}
因此,GetStringAsync
方法将基本承诺在将来的某个时刻返回类型字符串的任务,但是在调用DoIndependentWork
时,getString
还没有已经awaited
,所以它可以继续做其他工作,直到发生这种情况。
但是文档然后说
如果AccessTheWebAsync之间没有任何工作可以做 调用GetStringAsync并等待其完成,您可以简化 通过以下单个语句调用和等待代码。
string urlContents = await client.GetStringAsync();
如果您只是想立即等待某事,那么这样做是否有任何好处?或者只是因为您在应用程序开发过程中提前准备使用异步?
答案 0 :(得分:2)
主要优点是await <some-operation-that-does-I/O>
不会在等待中占用线程,从而提高资源利用率。只有在I / O完成时才会调试线程。您可以在系统上拥有比等待线程更多的未完成I / O请求。 Stephen Cleary有一个article on this,比我能更有说服力地解释它。
答案 1 :(得分:1)
一个令人期待的异步方法的设计者,认为在执行该方法的某个地方,他必须等待某些东西才能完成的机会很高。
而不是忙碌的等待,他给你的可能性&#34;其他东西&#34;直到你需要方法的结果或者不再需要做任何事情。
可能你没有&#34;别的东西&#34;但你的来电者可能或他的来电者。即使没有人做其他事情,使用async也可以让操作员有机会启动其他操作,例如最小化窗口。我们称之为&#34;保持用户界面响应&#34;。
所以答案是:是的,即使你无事可做,只是等待anyAsyncFunction(),每当你调用任何其他异步函数时,自己成为异步函数是有意义的。