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

Метод ForEachAsync

Метод ForEachAsync статический, доступен с .NET 6. Точка входа - static async Task Main. В теле можно await. Синхронный обход - ForEach. Сумму наращивают под lock, как в других примерах раздела.

Синтаксис

await Parallel.ForEachAsync(source, async (item, token) => { });

Пример

Давайте сложить пять чисел с await Task.CompletedTask:

using System; using System.Threading; using System.Threading.Tasks; class Program { static async Task Main() { int[] items = { 1, 2, 3, 4, 5 }; int sum = 0; object gate = new object(); await Parallel.ForEachAsync(items, async (item, token) => { await Task.CompletedTask; lock (gate) { sum += item; } }); int res = sum; Console.WriteLine(res); } }

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

15

Пример

Давайте накопить сумму через Interlocked.Add:

using System; using System.Threading; using System.Threading.Tasks; class Program { static async Task Main() { int[] items = { 1, 2, 3, 4, 5 }; int sum = 0; await Parallel.ForEachAsync(items, async (item, token) => { await Task.CompletedTask; Interlocked.Add(ref sum, item); }); int res = sum; Console.WriteLine(res); } }

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

15

Пример

Давайте обойти пустой набор:

using System; using System.Threading.Tasks; class Program { static async Task Main() { int[] items = { }; int sum = 0; await Parallel.ForEachAsync(items, async (item, token) => { await Task.CompletedTask; sum += item; }); int res = sum; Console.WriteLine(res); } }

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

0

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

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