この例では、本の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())
{
.....
asyncメソッドが完了するのを待つことによって、同期コードのような非同期コードを処理することができます。これは長い間ソフトウェア開発の問題であり、著者がそれを処理する方法は多くのうちの1つです。私の好みの方法ではありませんが、この例も非常に古いかもしれません。 – deltree