Есть несколько статей, в которых указывается, что асинхронные вызовы базы данных - плохая идея в .NET.
В C # Async CTP существует расширение System.Data.SqlClient.SqlCommand
, называемое ExecuteReaderAsync
. У меня есть несколько операций, описанных ниже, в моем существующем коде:
var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["hubConnectionString"].ConnectionString;
using (var conn = new SqlConnection(connectionString)) {
using (var cmd = new SqlCommand()) {
cmd.Connection = conn;
cmd.CommandText = "sp$DetailsTagsGetAllFromApprovedPropsWithCount";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
conn.Open();
var reader = cmd.ExecuteReader();
while (reader.Read()) {
//do the reading
}
conn.Close();
}
}
В моем коде есть несколько таких операций. Итак, у меня есть мысли преобразовать их в асинхронный режим.
Но, с другой стороны, я не вижу особой привлекательности в этом подходе (возможно, я смотрю не в правильном направлении, кто знает!).
Итак, есть ли здесь какие-либо недостатки в использовании этой новой модели асинхронного программирования?
Изменить:
Предполагая, что я реорганизовал код, как показано ниже:
public async Task> GetDataAsync() {
List foos = new List();
var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["hubConnectionString"].ConnectionString;
using (var conn = new SqlConnection(connectionString)) {
using (var cmd = new SqlCommand()) {
cmd.Connection = conn;
cmd.CommandText = "sp$DetailsTagsGetAllFromApprovedPropsWithCount";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
conn.Open();
var reader = await cmd.ExecuteReaderAsync();
while (reader.Read()) {
//do the reading
//create foos
}
conn.Close();
}
}
return foos;
}
Насколько я понимаю из ключевого слова await, он преобразует код, который следует после него, в качестве продолжения. Кроме того, когда он попадает в ключевое слово await, он немедленно возвращается к вызывающему, независимо от статуса операции. По завершении он возвращается и запускает код продолжения.
Это то, что я имел в виду.