EnumeratorCancellation
EnumeratorCancellation ставят
на необязательный CancellationToken
параметра async-итератора.
await foreach без отмены
суммирует 1 и 2 → 3.
Токен по умолчанию:
CanBeCanceled равен False.
Отмену не вызывают.
Синтаксис
static async IAsyncEnumerable<int> Count(
[EnumeratorCancellation] CancellationToken token = default)
Пример
Давайте пройти итератор без отмены:
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static async IAsyncEnumerable<int> Count(
[EnumeratorCancellation]
CancellationToken token = default)
{
yield return 1;
yield return 2;
}
static async Task Main()
{
int sum = 0;
await foreach (int n in Count())
{
sum += n;
}
int res = sum;
Console.WriteLine(res);
}
}
Результат выполнения кода:
3
Пример
Давайте проверить токен по умолчанию:
using System;
using System.Threading;
class Program
{
static void Main()
{
CancellationToken token = default;
bool res = token.CanBeCanceled;
Console.WriteLine(res);
}
}
Результат выполнения кода:
False
Пример
Давайте посчитать элементы в цикле:
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static async IAsyncEnumerable<int> Count(
[EnumeratorCancellation]
CancellationToken token = default)
{
yield return 1;
yield return 2;
}
static async Task Main()
{
int items = 0;
await foreach (int n in Count())
{
items++;
}
int res = items;
Console.WriteLine(res);
}
}
Результат выполнения кода:
2
Смотрите также
-
RequiredMember,
обязательный член -
SetsRequiredMembers,
конструктор required -
MaybeNull,
nullable-аннотации -
NotNullWhen,
условный not-null