Любой недостаток использования 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, он немедленно возвращается к своему вызывающему абоненту независимо от состояния операции. Когда он заканчивается, он возвращается и запускает код продолжения.

Это то, что я имею в виду.

Ответы на вопрос(2)

Ваш ответ на вопрос