我发现这个例子在书中使用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();
}
}
我只是不能换我的头解决这个问题。按照我的理解,等待块被调用(在这种情况下,ExecuteReaderAsync和ReadAsync)返回。调用异步方法并在代码中间立即阻塞的意义何在?在调用异步方法和返回调用方的结果之间没有实际执行任何操作? 它比单纯做这个更快或更有效率?
....
SqlDataReader dataReader = command.ExecuteReader();
while (dataReader.Read())
{
.....
通过等待异步方法完成,它们可以像处理同步代码一样处理异步代码。这在很长一段时间里一直是软件开发中的一个问题,作者选择处理这个问题的方式就是其中之一。这不是我喜欢的方式,但这个例子也可能很古老。 – deltree