Cualquier desventaja de usar ExecuteReaderAsync desde C # AsyncCTP

Hay algunos artículos que indican que las llamadas a bases de datos asíncronas son una mala idea en .NET.

Las llamadas de mi base de datos deben ser asincrónicaLas llamadas de mi base de datos deben ser asíncronas Parte II

En C # CTP asíncrono, hay unSystem.Data.SqlClient.SqlCommand extensión llamadaExecuteReaderAsync. Tengo algunas operaciones como a continuación en mi código existente:

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();
    }
}

Hay varias operaciones como esta en mi código. Por lo tanto, estoy pensando en convertirlos a asíncrono.

Pero por otro lado, no veo mucha atracción en este enfoque (tal vez no estoy mirando en la dirección correcta, ¡quién sabe!).

Entonces, ¿hay alguna desventaja de usar este nuevo modelo de programación asíncrona aquí?

Editar

uponiendo que refactorice el código de la siguiente manera:

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;

}

Por lo que entiendo de la palabra clave wait, convierte el código, que está detrás de él, como continuación. Además, cuando llega a la palabra clave de espera, vuelve inmediatamente a la persona que llama, independientemente del estado de la operación. Cuando termina, vuelve y dispara el código de continuación.

Esto es lo que tengo en mente.

Respuestas a la pregunta(4)

Su respuesta a la pregunta