Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csSpAsIc 351 of 509 menu
◀ ▶

Отмена асинхронного итератора в C#

Метод WithCancellation передаёт токен в перебор. Отмена не обрывает поток насильно: на следующем шаге перечисление останавливается само.

При отмене MoveNextAsync бросает OperationCanceledException.

Прервём длинный перебор коротким таймером. Успевшие числа могут появиться в консоли, а после отмены туда попадёт "end":

static async IAsyncEnumerable<int> ManyAsync() { for (int i = 0; i < 100; i++) { await Task.Delay(1); yield return i; } } using CancellationTokenSource cts = new(); cts.CancelAfter(2); try { await foreach (int v in ManyAsync().WithCancellation(cts.Token)) { Console.WriteLine(v); } } catch (OperationCanceledException) { Console.WriteLine("end"); }

Сделайте бесконечную последовательность чисел, прервите перебор отменой и выведите 1, когда перебор остановится.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить