IAsyncEnumerable
IAsyncEnumerable<T>
строят через async IAsyncEnumerable
и yield return. Перебор
вызывает
MoveNextAsync
и освобождает
IAsyncEnumerator.
Элемент читают из
Current.
Синтаксис
await foreach (T item in asyncEnumerable)
{
}
Пример
Давайте сложить элементы через
await foreach:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
int sum = 0;
await foreach (int x in Seq())
{
sum += x;
}
int res = sum;
Console.WriteLine(res);
}
static async IAsyncEnumerable<int> Seq()
{
yield return 1;
yield return 2;
await Task.CompletedTask;
}
}
Результат выполнения кода:
3
Пример
Давайте посчитать, сколько раз прошли цикл:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
int count = 0;
await foreach (int _ in Seq())
{
count++;
}
int res = count;
Console.WriteLine(res);
}
static async IAsyncEnumerable<int> Seq()
{
yield return 1;
yield return 2;
await Task.CompletedTask;
}
}
Результат выполнения кода:
2
Пример
Давайте взять только первый элемент:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
int res = 0;
await foreach (int x in Seq())
{
res = x;
break;
}
Console.WriteLine(res);
}
static async IAsyncEnumerable<int> Seq()
{
yield return 1;
yield return 2;
await Task.CompletedTask;
}
}
Результат выполнения кода:
1
Смотрите также
-
IAsyncEnumerator,
шаг перечисления -
MoveNextAsync,
следующий элемент -
Current,
текущее значение -
IAsyncEnumerable,
набор целиком