Свойство Current
Current не сдвигает
позицию: повторное чтение даёт
то же число. Перед первым
успешным
MoveNextAsync
значение не берут. Шаг вперёд -
снова MoveNextAsync.
Набор задаёт
IAsyncEnumerable.
Синтаксис
T item = asyncEnumerator.Current;
Пример
Давайте дважды прочитать
Current без нового шага:
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();
int a = en.Current;
int b = en.Current;
Console.WriteLine(a);
Console.WriteLine(b);
}
static async IAsyncEnumerable<int> Seq()
{
yield return 1;
yield return 2;
await Task.CompletedTask;
}
}
Результат выполнения кода:
1
1
Пример
Давайте прочитать Current
на втором элементе:
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();
int res = en.Current;
Console.WriteLine(res);
}
static async IAsyncEnumerable<int> Seq()
{
yield return 1;
yield return 2;
await Task.CompletedTask;
}
}
Результат выполнения кода:
2
Пример
Давайте убедиться, что после
второго 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();
await en.MoveNextAsync();
await en.MoveNextAsync();
int first = en.Current;
int second = en.Current;
Console.WriteLine(first == second);
}
static async IAsyncEnumerable<int> Seq()
{
yield return 1;
yield return 2;
await Task.CompletedTask;
}
}
Результат выполнения кода:
True
Смотрите также
-
MoveNextAsync,
сдвиг позиции -
IAsyncEnumerator,
перечислитель -
IAsyncEnumerable,
источник -
Current,
свойство элемента