А вы используете
У меня сложилось впечатление, будто после релиза C# 8 про эту штуку все забыли, поэтому решил сегодня про неё вспомнить)
Этот тип данных решал задачу потребления и создания асинхронных потоков данных.
То есть, таких потоков, в которых данные получают или генерируют асинхронно.
Напомню, что если у нас есть некоторый метод:
То в таком случае, можно перебрать возвращаемое значение следующим образом:
Но что в таком случае будет наполнять тело метода
Обычно, асинхронные потоки удобны в том случае, когда данные представлены в виде набора батчей, но нам необходимо эмулировать целостность потока.
То есть, всё сразу предъявить мы не можем, но способны заявить об этой возможности.
Например, есть многостраничный список с фиксированным количеством элементов на одной странице.
Тогда, внутри метода
В вашей практике встречается потребность в
IAsyncEnumerable
?У меня сложилось впечатление, будто после релиза C# 8 про эту штуку все забыли, поэтому решил сегодня про неё вспомнить)
Этот тип данных решал задачу потребления и создания асинхронных потоков данных.
То есть, таких потоков, в которых данные получают или генерируют асинхронно.
Напомню, что если у нас есть некоторый метод:
static async IAsyncEnumerable<Data> GetData()
{
// ...
}
То в таком случае, можно перебрать возвращаемое значение следующим образом:
await foreach (var item in GetData())
{
// ...
}
Но что в таком случае будет наполнять тело метода
GetData
?Обычно, асинхронные потоки удобны в том случае, когда данные представлены в виде набора батчей, но нам необходимо эмулировать целостность потока.
То есть, всё сразу предъявить мы не можем, но способны заявить об этой возможности.
Например, есть многостраничный список с фиксированным количеством элементов на одной странице.
Тогда, внутри метода
GetData
будет скачиваться одна страница и разворачиваться в плоский поток до тех пор, пока есть следующая страница:static async IAsyncEnumerable<Data> GetData()
{
var page = 1;
while (page <= 10)
{
var items = await Fetch(page);
foreach (var item in items)
yield return item;
page++;
}
}
В вашей практике встречается потребность в
IAsyncEnumerable
?