Certains articles indiquent que les appels de bases de données asynchrones sont une mauvaise idée dans .NET.Tout inconvénient d'utiliser ExecuteReaderAsync à partir de C# AsyncCTP
C# Async CTP, il y a une extension System.Data.SqlClient.SqlCommand
appelé ExecuteReaderAsync
. J'ai quelques opérations comme ci-dessous sur mon code existant:
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();
}
}
Il ya plusieurs opérations comme ceci sur mon code. Donc, j'ai des réflexions sur la conversion de ceux-ci en asynchrones. Mais d'un autre côté, je ne vois pas beaucoup d'attraction sur cette approche là-bas (peut-être que je ne regarde pas la bonne direction, qui sait!).
Alors, y a-t-il des inconvénients à utiliser ce nouveau modèle de programmation asynchrone?
Edit:
En supposant que je Refactor le code comme ci-dessous:
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;
}
Pour autant que je comprends le mot-clé await, il convertit le code, ce qui est après, comme suite. En outre, lorsqu'il frappe le mot-clé await, il renvoie immédiatement à son appelant, quel que soit le statut de l'opération. Quand il se termine, il revient et déclenche le code de continuation.
C'est ce que j'ai en tête.
Bien que la réponse acceptée soit parfaite, j'aimerais ajouter mon exemple. Dans mon site Web, j'ai fait toutes les méthodes d'action comme Task et fait tous les appels db async. Le site a vraiment commencé à se charger plus rapidement –