我發現這個例子在書中使用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