IAsyncEnumerable

Решил сразу дополнить про вариант с асинхронным yield. Такое скорее может встретиться при лайф кодинге у мидлов. IAsyncEnumerable используется при реализации потоков данных. Например читаем из базы и отдаем по grpc стриму условно бесконечно. (Кстати неадвно такое делал и чуял, что grpc обломится в какой-то момент, но нет, работал по несколько !дней! стрим без обрыва пока не заканчивался)

`public async IAsyncEnumerable StreamUsersFromDatabaseAsync() { await using var connection = new SqlConnection(_connectionString); await connection.OpenAsync(); var command = new SqlCommand("SELECT Id Users ORDER BY Id", connection); await using var reader = await command.ExecuteReaderAsync(); while (await reader.ReadAsync()) { yield return reader.GetInt32(0); } }

(код не проверял на работу, это примерно как он выглядит)

Кстати, если просто есть набор задач по получению данных перед обработкой лучше использовать Task.WhenAll `string[] results = await Task.WhenAll(new[]{GetStringTask(),GetStringTask()});

тогда предварительно все данные загрузятся одновременно, а если реализовать через IAsyncEnumerable, то загрузка следующей пачки начнется после того как закончится загрузка предыдущей

#middle``