Любой недостаток использования ExecuteReaderAsync из C # AsyncCTP
Есть несколько статей, которые указывают, что асинхронные вызовы базы данных являются плохой идеей в .NET.
Должны ли мои вызовы базы данных быть асинхронными?Должны ли мои вызовы базы данных быть асинхронными Часть IIНа 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<IEnumerable<Foo>> GetDataAsync() {
List<Foo> foos = new List<Foo>();
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, он немедленно возвращается к своему вызывающему абоненту независимо от состояния операции. Когда он заканчивается, он возвращается и запускает код продолжения.
Это то, что я имею в виду.