Nous utilisons IEnumerables de retour d'énormes ensembles de données à partir de la base de données:
public IEnumerable<Data> Read(...)
{
using(var connection = new SqlConnection(...))
{
// ...
while(reader.Read())
{
// ...
yield return item;
}
}
}
Maintenant, nous voulons utiliser des méthodes asynchrones à faire de même. Cependant il n'y a pas de IEnumerables pour async, donc nous avons besoin de recueillir des données dans une liste jusqu'à ce que l'ensemble du jeu de données est chargé:
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;
}
Cela permettra de consommer une énorme quantité de ressources sur le serveur, car toutes les données doivent être dans la liste avant le retour. Quel est le meilleur et facile à utiliser asynchrone alternative pour IEnumerables de travailler avec de grands flux de données? Je voudrais éviter de stocker toutes les données en mémoire pendant le traitement.