Un désavantage de l'utilisation de ExecuteReaderAsync à partir de C# AsyncCTP

Il y a quelques articles qui indiquent que async appels de base de données sont une mauvaise idée .NET.

Sur C# Async CTP, il y a un System.Data.SqlClient.SqlCommand extension appelée 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 y a plusieurs opérations de ce genre sur mon code. Je suis donc d'avoir des pensées sur la conversion de ceux async.

Mais d'un autre côté, je ne vois pas beaucoup d'attraction sur cette approche là-bas (peut-être que je ne suis pas de chercher dans la bonne direction, qui sait!).

Alors, est-il à tous les inconvénients de l'utilisation de ce nouveau modèle de programmation asynchrone ici?

Edit:

En supposant que je refactoriser 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;

}

Aussi loin que je comprends bien le mot clé await, il convertit le code, qui est, après cela, que la continuation. Aussi, quand il frappe le mot clé await, il retourne immédiatement à son appelant, indépendamment de l'état de l'opération. Quand il a fini, il revient et de feu, la poursuite de code.

C'est ce que j'ai à l'esprit.

  • Bien que l'on a accepté la réponse est parfait, je voudrais ajouter mon exemple. Dans mon site, j'ai fait toutes les méthodes d'action de la Tâche<ActionResult> et que toutes les db des appels asynchrones. Le site a vraiment commencé le chargement plus rapide
InformationsquelleAutor tugberk | 2012-02-24