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

Ожидание foreach

Запись await foreach обходит IAsyncEnumerable<T> из System.Collections.Generic. На каждом шаге ожидается следующий элемент асинхронного итератора; для этого метод с yield объявляют как async IAsyncEnumerable<T>. Тело цикла выполняется в async-методе и использует await.

Синтаксис

await foreach (тип элемент in источник) { // тело }

Пример

Давайте обойдем асинхронный поток из трёх чисел:

using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async IAsyncEnumerable<int> GetNums() { yield return 1; yield return 2; yield return 3; } static async Task Main() { await foreach (int num in GetNums()) { Console.WriteLine(num); } } }

Результат выполнения кода:

1 2 3

Пример

Давайте отдадим строки из асинхронного итератора:

using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async IAsyncEnumerable<string> GetLines() { yield return "abcde"; yield return "12345"; } static async Task Main() { await foreach (string line in GetLines()) { Console.WriteLine(line); } } }

Результат выполнения кода:

"abcde" "12345"

Пример

Давайте накапливать сумму в цикле:

using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async IAsyncEnumerable<int> GetNums() { yield return 1; yield return 2; yield return 3; } static async Task Main() { int sum = 0; await foreach (int num in GetNums()) { sum += num; } Console.WriteLine(sum); } }

Результат выполнения кода:

6

Пример

Давайте выведем только первые два элемента:

using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async IAsyncEnumerable<int> GetNums() { yield return 1; yield return 2; yield return 3; } static async Task Main() { int count = 0; await foreach (int num in GetNums()) { Console.WriteLine(num); count++; if (count == 2) { break; } } } }

Результат выполнения кода:

1 2

Смотрите также

  • оператор await,
    которым ждут одну задачу
  • цикл foreach,
    синхронный аналог обхода коллекции
  • оператор yield,
    которым отдают элементы итератора
  • модификатор async,
    который нужен для асинхронного метода
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить