Есть ли преимущества чтения каждого асинхронного поля из SqlDataReader?

Есть ли какой-либо выигрыш при чтении полей асинхронно?

Скажите, есть ли у меня следующее:

SqlDataReader reader = await cmd.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
    try
    {
        if (reader.IsDBNull(COL_NAME))
        {
            continue;
        }

        user = new User();
        user.Id = reader.GetInt32(COL_ID);

Будет ли реальная польза в мире, используя IsDBNullAsync и GetInt32Async и т.д.

Ответы

Ответ 1

После некоторого подглядывания на отражателе интересные методы здесь (GetFieldValueAsync<T>, IsDBNullAsync и internal method GetBytesAsync) только делают "интересный" код для сценария CommandBehavior.SequentialAccess. Итак: если вы не используете это: не беспокойтесь - данные строки уже буферизованы в памяти, а Task<T> - чистые накладные расходы (хотя это будет, по крайней мере, результат уже завершенной задачи, т.е. Task.FromResult<T> - который эффективно обрабатывается await без контекстного переключателя).