Мы используем IEnumerables для возврата огромных наборов данных из базы данных:
public IEnumerable<Data> Read(...)
{
using(var connection = new SqlConnection(...))
{
// ...
while(reader.Read())
{
// ...
yield return item;
}
}
}
Теперь мы хотим использовать методы async, чтобы сделать то же самое. Однако для async нет IEnumerables, поэтому мы должны собирать данные в список до загрузки всего набора данных:
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;
}
Это потребует огромного количества ресурсов на сервере, потому что все данные должны быть в списке перед возвратом. Какая самая лучшая и простая в использовании альтернатива async для IEnumerables для работы с большими потоками данных? Я бы хотел избежать хранения всех данных в памяти во время обработки.