为什么要在方法中间等待异步方法?

use*_*246 0 c# async-await

我在书中使用async/await东西找到了这个例子.可以请有人告诉我等待异步方法有什么好处,如下例所示?

using (SqlConnection connection = new SqlConnection(connectionString))
{
  SqlCommand command = new SqlCommand("SELECT * FROM People", connection);
  await connection.OpenAsync();
  SqlDataReader dataReader = **await** command.ExecuteReaderAsync();
  while (**await** dataReader.ReadAsync())
  {
    string formatStringWithMiddleName = "Person ({0}) is named {1} {2} {3}";
    string formatStringWithoutMiddleName = "Person ({0}) is named {1} {3}";
    if ((dataReader["middlename"] == null))
    {
      Console.WriteLine(formatStringWithoutMiddleName,
      dataReader["id"],
      dataReader["firstname"],
      dataReader["lastname"]);
    }
    else
    {
      Console.WriteLine(formatStringWithMiddleName,
      dataReader["id"],
      dataReader["firstname"],
      dataReader["middlename"],
      dataReader["lastname"]);
    }
  }
  dataReader.Close();
  }
}
Run Code Online (Sandbox Code Playgroud)

我无法绕过这个.我理解的方式是等待阻塞,直到调用的方法(在这种情况下,ExecuteReaderAsync和ReadAsync)返回.调用异步方法并在代码中间立即阻塞有什么意义,而不是在调用异步方法和结果返回给调用者之间实际执行任何操作?如何简单地执行此操作更快还是更有效?

....

SqlDataReader dataReader = command.ExecuteReader();
      while (dataReader.Read())
      {
           .....
Run Code Online (Sandbox Code Playgroud)

Ste*_*ary 5

我理解的方式是等待阻塞,直到调用的方法(在这种情况下,ExecuteReaderAsync和ReadAsync)返回.

没有; await暂停方法并返回给调用者.因此,它并没有阻挡用于期间调用线程ReadAsync操作.

从概念上讲,它是同步串行之间的区别.同步意味着阻塞:方法调用会停止线程直到Read完成.Serial一次表示一个:该方法将暂停执行直到ReadAsync完成.因此,常见await *Async()模式是串行的,但是以异步方式,而不是同步方式.

有关详细信息async,并await请参阅我的async介绍文章.