Метод MoveNextAsync
Метод MoveNextAsync
возвращает ValueTask<bool>.
После true читают
Current;
до первого true - нет.
Пустой набор сразу даёт
false. Автоматический
перебор -
await foreach.
Синтаксис
bool hasNext = await asyncEnumerator.MoveNextAsync();
Пример
Давайте вызвать первый
MoveNextAsync и прочитать
Current:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
await using IAsyncEnumerator<int> en = Seq().GetAsyncEnumerator();
bool ok = await en.MoveNextAsync();
int cur = en.Current;
Console.WriteLine(ok);
Console.WriteLine(cur);
}
static async IAsyncEnumerable<int> Seq()
{
yield return 1;
yield return 2;
await Task.CompletedTask;
}
}
Результат выполнения кода:
True
1
Пример
Давайте дойти до конца последовательности:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
await using IAsyncEnumerator<int> en = Seq().GetAsyncEnumerator();
await en.MoveNextAsync();
await en.MoveNextAsync();
bool res = await en.MoveNextAsync();
Console.WriteLine(res);
}
static async IAsyncEnumerable<int> Seq()
{
yield return 1;
yield return 2;
await Task.CompletedTask;
}
}
Результат выполнения кода:
False
Пример
Давайте проверить пустой итератор:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
await using IAsyncEnumerator<int> en = Empty().GetAsyncEnumerator();
bool res = await en.MoveNextAsync();
Console.WriteLine(res);
}
static async IAsyncEnumerable<int> Empty()
{
await Task.CompletedTask;
}
}
Результат выполнения кода:
False
Смотрите также
-
Current,
послеtrue -
IAsyncEnumerator,
ручной цикл -
IAsyncEnumerable,
await foreach -
MoveNextAsync,
метод шага