Asíncrono con grandes flujos de datos

Usamos IEnumerables para devolver grandes conjuntos de datos de la base de datos:

public IEnumerable<Data> Read(...)
{
    using(var connection = new SqlConnection(...))
    {
        // ...
        while(reader.Read())
        {
            // ...
            yield return item;
        }
    }
}

Ahora queremos usar métodos asíncronos para hacer lo mismo. Sin embargo, no hay IEnumerables para asíncrono, por lo que debemos recopilar datos en una lista hasta que se cargue todo el conjunto de datos:

public async Task<List<Data>> ReadAsync(...)
{
    var result = new List<Data>();
    using(var connection = new SqlConnection(...))
    {
        // ...
        while(await reader.ReadAsync().ConfigureAwait(false))
        {
            // ...
            result.Add(item);
        }
    }
    return result;
}

Esto consumirá una gran cantidad de recursos en el servidor, porque todos los datos deben estar en la lista antes de regresar. ¿Cuál es la alternativa asíncrona mejor y más fácil de usar para que IEnumerables funcione con grandes flujos de datos? Me gustaría evitar almacenar todos los datos en la memoria durante el procesamiento.

Respuestas a la pregunta(5)

Su respuesta a la pregunta