Поделиться через


Parallel.ForEach Метод

Определение

Выполняет операцию foreach (For Each в Visual Basic), обеспечивая возможность параллельного выполнения итераций.

Перегрузки

ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

Выполняет операцию foreach (For Each в Visual Basic) с локальными данными потока для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

Выполняет операцию foreach (For Each в Visual Basic) с 64-разрядными индексами и локальными данными потока для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

ForEach<TSource,TLocal>(Partitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

Выполняет операцию foreach (For Each в Visual Basic) с локальными данными потока для объекта Partitioner, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

foreach Выполняет операцию (For Each в Visual Basic) с 64-разрядными индексами и локальными данными OrderablePartitioner<TSource> потока в , в которой итерации могут выполняться параллельно, можно настроить параметры цикла, а также отслеживать состояние цикла и управлять ими.

ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

Выполняет операцию foreach (For Each в Visual Basic) с локальными данными потока для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, а также контроля состояния цикла и управления этим состоянием.

ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

Выполняет операцию foreach (For Each в Visual Basic) с локальными данными потока для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, а также контроля состояния цикла и управления этим состоянием.

ForEach<TSource,TLocal>(Partitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

Выполняет операцию foreach (For Each в Visual Basic) с локальными данными потока для объекта Partitioner, обеспечивая возможность параллельного выполнения итераций, а также контроля состояния цикла и управления этим состоянием.

ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

Выполняет операцию foreach (For Each в Visual Basic) с локальными данными потока для объекта OrderablePartitioner<TSource>, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource>)

Выполняет операцию foreach (For Each в Visual Basic) для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций и настройки параметров цикла.

ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)

Выполняет операцию foreach (For Each в Visual Basic) для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)

Выполняет операцию foreach (For Each в Visual Basic) для объекта OrderablePartitioner<TSource>, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource>)

Выполняет операцию foreach (For Each в Visual Basic) для объекта Partitioner, обеспечивая возможность параллельного выполнения итераций и настройки параметров цикла.

ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)

Выполняет операцию foreach (For Each в Visual Basic) с 64-разрядными индексами для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

ForEach<TSource>(Partitioner<TSource>, Action<TSource,ParallelLoopState>)

Выполняет операцию foreach (For Each в Visual Basic) для объекта Partitioner, обеспечивая возможность параллельного выполнения итераций, а также контроля состояния цикла и управления этим состоянием.

ForEach<TSource>(Partitioner<TSource>, Action<TSource>)

Выполняет операцию foreach (For Each в Visual Basic) для объекта Partitioner, обеспечивая возможность параллельного выполнения итераций.

ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState,Int64>)

Выполняет операцию foreach (For Each в Visual Basic) с 64-разрядными индексами для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, а также контроля состояния цикла и управления этим состоянием.

ForEach<TSource>(OrderablePartitioner<TSource>, Action<TSource,ParallelLoopState,Int64>)

Выполняет операцию foreach (For Each в Visual Basic) для объекта OrderablePartitioner<TSource>, обеспечивая возможность параллельного выполнения итераций, а также контроля состояния цикла и управления этим состоянием.

ForEach<TSource>(IEnumerable<TSource>, Action<TSource>)

Выполняет операцию foreach (For Each в Visual Basic) для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций.

ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)

Выполняет операцию foreach (For Each в Visual Basic) для объекта Partitioner, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState>)

Выполняет операцию foreach (For Each в Visual Basic) для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, а также контроля состояния цикла и управления этим состоянием.

ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) с локальными данными потока для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Generic.IEnumerable<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : seq<'Source> * System.Threading.Tasks.ParallelOptions * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As IEnumerable(Of TSource), parallelOptions As ParallelOptions, localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

Параметры типа

TSource

Тип данных в источнике.

TLocal

Тип данных, локальных для потока.

Параметры

source
IEnumerable<TSource>

Перечислимый источник данных.

parallelOptions
ParallelOptions

Объект, используемый для настройки поведения этой операции.

localInit
Func<TLocal>

Делегат функции, который возвращает начальное состояние локальных данных для каждой задачи.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Делегат, который вызывается один раз за итерацию.

localFinally
Action<TLocal>

Делегат, который выполняет финальное действие с локальным состоянием каждой задачи.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Аргумент source имеет значение null.

-или-

Аргумент parallelOptions имеет значение null.

-или-

Аргумент body имеет значение null.

-или-

Аргумент localInit имеет значение null.

-или-

Аргумент localFinally имеет значение null.

Токен CancellationToken в аргументе parallelOptions отменен.

CancellationTokenSource, связанный с CancellationToken в parallelOptions, удален.

Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.

Комментарии

Делегат body вызывается один раз для каждого элемента в source перечисляемом объекте . Он предоставляется со следующими параметрами: текущий элемент, экземпляр, ParallelLoopState который может использоваться для преждевременного выхода из цикла, и некоторое локальное состояние, которое может быть совместно использовано итерациями, которые выполняются в одном потоке.

Делегат localInit вызывается один раз для каждой задачи, которая участвует в выполнении цикла, и возвращает начальное локальное состояние для каждой из этих задач. Эти начальные состояния передаются в первые body вызовы для каждой задачи. Затем каждый последующий вызов текста возвращает возможно измененное значение состояния, которое передается следующему вызову текста. Наконец, последний вызов текста для каждой задачи возвращает значение состояния, которое передается делегату localFinally . Делегат localFinally вызывается один раз для каждого потока для выполнения окончательного действия с локальным состоянием каждой задачи. Этот делегат может вызываться одновременно для нескольких задач; Поэтому необходимо синхронизировать доступ ко всем общим переменным.

Метод Parallel.ForEach может использовать больше задач, чем потоки в течение всего времени его выполнения, так как существующие задачи выполняются и заменяются новыми задачами. Это дает базовому TaskScheduler объекту возможность добавлять, изменять или удалять потоки, обслуживающие цикл.

См. также раздел

Применяется к

ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) с 64-разрядными индексами и локальными данными потока для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, long, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Generic.IEnumerable<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,long,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : seq<'Source> * System.Threading.Tasks.ParallelOptions * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, int64, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As IEnumerable(Of TSource), parallelOptions As ParallelOptions, localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, Long, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

Параметры типа

TSource

Тип данных в источнике.

TLocal

Тип данных, локальных для потока.

Параметры

source
IEnumerable<TSource>

Перечислимый источник данных.

parallelOptions
ParallelOptions

Объект, используемый для настройки поведения этой операции.

localInit
Func<TLocal>

Делегат функции, который возвращает начальное состояние локальных данных для каждой задачи.

body
Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>

Делегат, который вызывается один раз за итерацию.

localFinally
Action<TLocal>

Делегат, который выполняет финальное действие с локальным состоянием каждой задачи.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Аргумент source имеет значение null.

-или-

Аргумент parallelOptions имеет значение null.

-или-

Аргумент body имеет значение null.

-или-

Аргумент localInit имеет значение null.

-или-

Аргумент localFinally имеет значение null.

Токен CancellationToken в аргументе parallelOptions отменен.

CancellationTokenSource, связанный с CancellationToken в parallelOptions, удален.

Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.

Комментарии

Делегат body вызывается один раз для каждого элемента в source перечисляемом объекте . Он предоставляется со следующими параметрами: текущий элемент, экземпляр, ParallelLoopState который может использоваться для преждевременного выхода из цикла, индекс текущего элемента (Int64) и некоторое локальное состояние, которое может быть совместно использовано в итерациях, выполняемых в одном потоке.

Делегат localInit вызывается один раз для каждой задачи, которая участвует в выполнении цикла, и возвращает начальное локальное состояние для каждой из этих задач. Эти начальные состояния передаются в первые body вызовы для каждой задачи. Затем каждый последующий вызов текста возвращает возможно измененное значение состояния, которое передается следующему вызову текста. Наконец, последний вызов текста для каждой задачи возвращает значение состояния, которое передается делегату localFinally . Делегат localFinally вызывается один раз для каждого потока для выполнения окончательного действия в локальном состоянии каждой задачи. Этот делегат может вызываться одновременно для нескольких задач; Поэтому необходимо синхронизировать доступ ко всем общим переменным.

Метод Parallel.ForEach может использовать больше задач, чем потоки в течение всего времени его выполнения, так как существующие задачи завершаются и заменяются новыми задачами. Это дает базовому TaskScheduler объекту возможность добавлять, изменять или удалять потоки, обслуживающие цикл.

См. также раздел

Применяется к

ForEach<TSource,TLocal>(Partitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) с локальными данными потока для объекта Partitioner, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::Partitioner<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Concurrent.Partitioner<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : System.Collections.Concurrent.Partitioner<'Source> * System.Threading.Tasks.ParallelOptions * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As Partitioner(Of TSource), parallelOptions As ParallelOptions, localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

Параметры типа

TSource

Тип элементов в объекте source.

TLocal

Тип данных, локальных для потока.

Параметры

source
Partitioner<TSource>

Разделитель, содержащий исходный источник данных.

parallelOptions
ParallelOptions

Объект, используемый для настройки поведения этой операции.

localInit
Func<TLocal>

Делегат функции, который возвращает начальное состояние локальных данных для каждой задачи.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Делегат, который вызывается один раз за итерацию.

localFinally
Action<TLocal>

Делегат, который выполняет финальное действие с локальным состоянием каждой задачи.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Аргумент source имеет значение null.

-или-

Аргумент parallelOptions имеет значение null.

-или-

Аргумент body имеет значение null.

-или-

Аргумент localInit имеет значение null.

-или-

Аргумент localFinally имеет значение null.

Свойство SupportsDynamicPartitions в разделителе sourcePartitioner возвращает значение false или разделитель возвращает части со значением null.

Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.

Токен CancellationToken в аргументе parallelOptions отменен.

CancellationTokenSource, связанный с CancellationToken в parallelOptions, удален.

Комментарии

Эта перегрузка предоставляется для сценариев, в которых требуется переопределить схему секционирования по умолчанию. Например, секционирование диапазона может оказаться полезным для небольших тел цикла. Метод ForEach ожидает, что пользовательские секционеры будут поддерживать динамическое секционирование. Эта перегрузка предоставляется для сценариев с небольшими телами цикла, которые могут извлечь выгоду из секционирования статических диапазонов. Секционеры должны поддерживать динамические секции. Дополнительные сведения см. в разделах Пользовательские секционаторы для PLINQ и TPL и Практическое руководство. Реализация динамических секций.

Делегат localInit вызывается один раз для каждой задачи, которая участвует в выполнении цикла, и возвращает начальное локальное состояние для каждой из этих задач. Эти начальные состояния передаются в первые body вызовы для каждой задачи. Затем каждый последующий вызов текста возвращает возможно измененное значение состояния, которое передается следующему вызову текста. Наконец, последний вызов текста каждой задачи возвращает значение состояния, передаваемое делегату localFinally . Делегат localFinally вызывается один раз для каждой задачи для выполнения окончательного действия в локальном состоянии каждой задачи. Этот делегат может вызываться одновременно для нескольких задач; Поэтому необходимо синхронизировать доступ ко всем общим переменным.

Метод Parallel.ForEach может использовать больше задач, чем потоки в течение всего времени его выполнения, так как существующие задачи завершаются и заменяются новыми задачами. Это дает базовому TaskScheduler объекту возможность добавлять, изменять или удалять потоки, обслуживающие цикл.

См. также раздел

Применяется к

ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

foreach Выполняет операцию (For Each в Visual Basic) с 64-разрядными индексами и локальными данными OrderablePartitioner<TSource> потока в , в которой итерации могут выполняться параллельно, можно настроить параметры цикла, а также отслеживать состояние цикла и управлять ими.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::OrderablePartitioner<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, long, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Concurrent.OrderablePartitioner<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,long,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : System.Collections.Concurrent.OrderablePartitioner<'Source> * System.Threading.Tasks.ParallelOptions * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, int64, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As OrderablePartitioner(Of TSource), parallelOptions As ParallelOptions, localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, Long, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

Параметры типа

TSource

Тип элементов в объекте source.

TLocal

Тип данных, локальных для потока.

Параметры

source
OrderablePartitioner<TSource>

Упорядочиваемый разделитель, содержащий исходный источник данных.

parallelOptions
ParallelOptions

Объект, используемый для настройки поведения этой операции.

localInit
Func<TLocal>

Делегат функции, который возвращает начальное состояние локальных данных для каждой задачи.

body
Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>

Делегат, который вызывается один раз за итерацию.

localFinally
Action<TLocal>

Делегат, который выполняет финальное действие с локальным состоянием каждой задачи.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Аргумент source имеет значение null.

-или-

Аргумент parallelOptions имеет значение null.

-или-

Аргумент body имеет значение null.

-или-

Аргумент localInit или аргумент localFinally имеет значение null.

Свойство SupportsDynamicPartitions в разделителе sourcePartitioner возвращает значение false или разделитель возвращает части со значением null.

Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.

Токен CancellationToken в аргументе parallelOptions отменен.

CancellationTokenSource, связанный с CancellationToken в parallelOptions, удален.

Комментарии

Эта перегрузка предоставляется для сценариев, в которых требуется переопределить схему секционирования по умолчанию. Например, секционирование диапазона может оказаться полезным для небольших тел цикла. Метод ForEach ожидает, что пользовательские секционеры будут поддерживать динамическое секционирование. Дополнительные сведения см. в разделах Пользовательские секционаторы для PLINQ и TPL и Практическое руководство. Реализация динамических секций.

Делегат localInit вызывается один раз для каждой задачи, которая участвует в выполнении цикла, и возвращает начальное локальное состояние для каждой из этих задач. Эти начальные состояния передаются в первые body вызовы для каждой задачи. Затем каждый последующий вызов текста возвращает возможно измененное значение состояния, которое передается следующему вызову текста. Наконец, последний вызов текста в каждом потоке возвращает значение состояния, передаваемое делегату localFinally . Делегат localFinally вызывается один раз для каждой задачи для выполнения окончательного действия в локальном состоянии каждой задачи. Этот делегат может вызываться одновременно для нескольких задач; Поэтому необходимо синхронизировать доступ ко всем общим переменным.

Метод Parallel.ForEach может использовать больше задач, чем потоки в течение всего времени его выполнения, так как существующие задачи завершаются и заменяются новыми задачами. Это дает базовому TaskScheduler объекту возможность добавлять, изменять или удалять потоки, обслуживающие цикл.

См. также раздел

Применяется к

ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) с локальными данными потока для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, а также контроля состояния цикла и управления этим состоянием.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Generic.IEnumerable<TSource> source, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : seq<'Source> * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As IEnumerable(Of TSource), localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

Параметры типа

TSource

Тип данных в источнике.

TLocal

Тип данных, локальных для потока.

Параметры

source
IEnumerable<TSource>

Перечислимый источник данных.

localInit
Func<TLocal>

Делегат функции, который возвращает начальное состояние локальных данных для каждой задачи.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Делегат, который вызывается один раз за итерацию.

localFinally
Action<TLocal>

Делегат, который выполняет финальное действие с локальным состоянием каждой задачи.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Аргумент source имеет значение null.

-или-

Аргумент body имеет значение null.

-или-

Аргумент localInit имеет значение null.

-или-

Аргумент localFinally имеет значение null.

Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.

Примеры

В следующем примере показано, как использовать метод с локальным ForEach состоянием:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

class ForEachWithThreadLocal
{
    // Demonstrated features:
    // 		Parallel.ForEach()
    //		Thread-local state
    // Expected results:
    //      This example sums up the elements of an int[] in parallel.
    //      Each thread maintains a local sum. When a thread is initialized, that local sum is set to 0.
    //      On every iteration the current element is added to the local sum.
    //      When a thread is done, it safely adds its local sum to the global sum.
    //      After the loop is complete, the global sum is printed out.
    // Documentation:
    //		http://msdn.microsoft.com/library/dd990270(VS.100).aspx
    static void Main()
    {
        // The sum of these elements is 40.
        int[] input = { 4, 1, 6, 2, 9, 5, 10, 3 };
        int sum = 0;

        try
        {
            Parallel.ForEach(
                    input,					        // source collection
                    () => 0,					        // thread local initializer
                    (n, loopState, localSum) =>		// body
                    {
                        localSum += n;
                        Console.WriteLine("Thread={0}, n={1}, localSum={2}", Thread.CurrentThread.ManagedThreadId, n, localSum);
                        return localSum;
                    },
                    (localSum) => Interlocked.Add(ref sum, localSum)					// thread local aggregator
                );

            Console.WriteLine("\nSum={0}", sum);
        }
        // No exception is expected in this example, but if one is still thrown from a task,
        // it will be wrapped in AggregateException and propagated to the main thread.
        catch (AggregateException e)
        {
            Console.WriteLine("Parallel.ForEach has thrown an exception. THIS WAS NOT EXPECTED.\n{0}", e);
        }
    }
}
Imports System.Threading
Imports System.Threading.Tasks

Module ForEachDemo

    ' Demonstrated features:
    '   Parallel.ForEach()
    '   Thread-local state
    ' Expected results:
    '   This example sums up the elements of an int[] in parallel.
    '   Each thread maintains a local sum. When a thread is initialized, that local sum is set to 0.
    '   On every iteration the current element is added to the local sum.
    '   When a thread is done, it safely adds its local sum to the global sum.
    '   After the loop is complete, the global sum is printed out.
    ' Documentation:
    '   http://msdn.microsoft.com/library/dd990270(VS.100).aspx
    Private Sub ForEachDemo()
        ' The sum of these elements is 40.
        Dim input As Integer() = {4, 1, 6, 2, 9, 5, _
        10, 3}
        Dim sum As Integer = 0

        Try
            ' source collection
            Parallel.ForEach(input,
                             Function()
                                 ' thread local initializer
                                 Return 0
                             End Function,
                             Function(n, loopState, localSum)
                                 ' body
                                 localSum += n
                                 Console.WriteLine("Thread={0}, n={1}, localSum={2}", Thread.CurrentThread.ManagedThreadId, n, localSum)
                                 Return localSum
                             End Function,
                             Sub(localSum)
                                 ' thread local aggregator
                                 Interlocked.Add(sum, localSum)
                             End Sub)

            Console.WriteLine(vbLf & "Sum={0}", sum)
        Catch e As AggregateException
            ' No exception is expected in this example, but if one is still thrown from a task,
            ' it will be wrapped in AggregateException and propagated to the main thread.
            Console.WriteLine("Parallel.ForEach has thrown an exception. THIS WAS NOT EXPECTED." & vbLf & "{0}", e)
        End Try
    End Sub


End Module

Комментарии

Делегат body вызывается один раз для каждого элемента перечисления source . Он предоставляется со следующими параметрами: текущий элемент, экземпляр, ParallelLoopState который может использоваться для преждевременного выхода из цикла, и некоторое локальное состояние, которое может быть совместно использовано между итерациями, выполняемыми в одном потоке.

Делегат localInit вызывается один раз для каждой задачи, которая участвует в выполнении цикла, и возвращает начальное локальное состояние для каждой из этих задач. Эти начальные состояния передаются в первые body вызовы для каждой задачи. Затем каждый последующий вызов текста возвращает возможно измененное значение состояния, которое передается следующему вызову текста. Наконец, последний вызов текста каждой задачи возвращает значение состояния, передаваемое делегату localFinally . Делегат localFinally вызывается один раз для каждого потока для выполнения окончательного действия в локальном состоянии каждой задачи. Этот делегат может вызываться одновременно для нескольких задач; Поэтому необходимо синхронизировать доступ ко всем общим переменным.

Метод Parallel.ForEach может использовать больше задач, чем потоки в течение всего времени его выполнения, так как существующие задачи выполняются и заменяются новыми задачами. Это дает базовому TaskScheduler объекту возможность добавлять, изменять или удалять потоки, обслуживающие цикл.

См. также раздел

Применяется к

ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) с локальными данными потока для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, а также контроля состояния цикла и управления этим состоянием.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, long, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Generic.IEnumerable<TSource> source, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,long,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : seq<'Source> * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, int64, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As IEnumerable(Of TSource), localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, Long, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

Параметры типа

TSource

Тип данных в источнике.

TLocal

Тип данных, локальных для потока.

Параметры

source
IEnumerable<TSource>

Перечислимый источник данных.

localInit
Func<TLocal>

Делегат функции, который возвращает начальное состояние локальных данных для каждой задачи.

body
Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>

Делегат, который вызывается один раз за итерацию.

localFinally
Action<TLocal>

Делегат, который выполняет финальное действие с локальным состоянием каждой задачи.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Аргумент source имеет значение null.

-или-

Аргумент body имеет значение null.

-или-

Аргумент localInit имеет значение null.

-или-

Аргумент localFinally имеет значение null.

Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.

Комментарии

Делегат body вызывается один раз для каждого элемента в source перечисляемом объекте . Он предоставляется со следующими параметрами: текущий элемент, экземпляр, ParallelLoopState который может использоваться для преждевременного выхода из цикла, индекс текущего элемента (Int64) и некоторое локальное состояние, которое может быть совместно использовано в итерациях, выполняемых в одном потоке.

Делегат localInit вызывается один раз для каждой задачи, которая участвует в выполнении цикла, и возвращает начальное локальное состояние для каждой из этих задач. Эти начальные состояния передаются в первые body вызовы для каждой задачи. Затем каждый последующий вызов текста возвращает возможно измененное значение состояния, которое передается следующему вызову текста. Наконец, последний вызов текста для каждой задачи возвращает значение состояния, которое передается делегату localFinally . Делегат localFinally вызывается один раз для каждой задачи для выполнения окончательного действия в локальном состоянии каждой задачи. Этот делегат может вызываться одновременно для нескольких задач; Поэтому необходимо синхронизировать доступ ко всем общим переменным.

Метод Parallel.ForEach может использовать больше задач, чем потоки в течение всего времени его выполнения, так как существующие задачи выполняются и заменяются новыми задачами. Это дает базовому TaskScheduler объекту возможность добавлять, изменять или удалять потоки, обслуживающие цикл.

См. также раздел

Применяется к

ForEach<TSource,TLocal>(Partitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) с локальными данными потока для объекта Partitioner, обеспечивая возможность параллельного выполнения итераций, а также контроля состояния цикла и управления этим состоянием.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::Partitioner<TSource> ^ source, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Concurrent.Partitioner<TSource> source, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : System.Collections.Concurrent.Partitioner<'Source> * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As Partitioner(Of TSource), localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

Параметры типа

TSource

Тип элементов в объекте source.

TLocal

Тип данных, локальных для потока.

Параметры

source
Partitioner<TSource>

Разделитель, содержащий исходный источник данных.

localInit
Func<TLocal>

Делегат функции, который возвращает начальное состояние локальных данных для каждой задачи.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Делегат, который вызывается один раз за итерацию.

localFinally
Action<TLocal>

Делегат, который выполняет финальное действие с локальным состоянием каждой задачи.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Аргумент source имеет значение null.

-или-

Аргумент body имеет значение null.

-или-

Аргумент localInit имеет значение null.

-или-

Аргумент localFinally имеет значение null.

Свойство SupportsDynamicPartitions в разделителе sourcePartitioner возвращает значение false или разделитель возвращает части со значением null.

Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.

Комментарии

Эта перегрузка предоставляется для сценариев, в которых требуется переопределить схему секционирования по умолчанию. Например, небольшие тела цикла могут воспользоваться преимуществами секционирования диапазона. Метод ForEach ожидает, что пользовательские секционеры будут поддерживать динамическое секционирование. Дополнительные сведения см. в разделах Пользовательские секционаторы для PLINQ и TPL и Практическое руководство. Реализация динамических секций.

Делегат localInit вызывается один раз для каждого потока, участвующего в выполнении цикла, и возвращает начальное локальное состояние для каждой из этих задач. Эти начальные состояния передаются в первые body вызовы для каждой задачи. Затем каждый последующий вызов текста возвращает возможно измененное значение состояния, которое передается следующему вызову текста. Наконец, последний вызов текста для каждой задачи возвращает значение состояния, которое передается делегату localFinally . Делегат localFinally вызывается один раз для каждой задачи для выполнения окончательного действия в локальном состоянии каждой задачи. Этот делегат может вызываться одновременно для нескольких задач; Поэтому необходимо синхронизировать доступ ко всем общим переменным.

Метод Parallel.ForEach может использовать больше задач, чем потоки в течение всего времени его выполнения, так как существующие задачи выполняются и заменяются новыми задачами. Это дает базовому TaskScheduler объекту возможность добавлять, изменять или удалять потоки, обслуживающие цикл.

См. также раздел

Применяется к

ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) с локальными данными потока для объекта OrderablePartitioner<TSource>, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::OrderablePartitioner<TSource> ^ source, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, long, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Concurrent.OrderablePartitioner<TSource> source, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,long,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : System.Collections.Concurrent.OrderablePartitioner<'Source> * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, int64, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As OrderablePartitioner(Of TSource), localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, Long, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

Параметры типа

TSource

Тип элементов в объекте source.

TLocal

Тип данных, локальных для потока.

Параметры

source
OrderablePartitioner<TSource>

Упорядочиваемый разделитель, содержащий исходный источник данных.

localInit
Func<TLocal>

Делегат функции, который возвращает начальное состояние локальных данных для каждой задачи.

body
Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>

Делегат, который вызывается один раз за итерацию.

localFinally
Action<TLocal>

Делегат, который выполняет финальное действие с локальным состоянием каждой задачи.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Аргумент source имеет значение null.

-или-

Аргумент body имеет значение null.

-или-

Аргумент localInit имеет значение null.

-или-

Аргумент localFinally имеет значение null.

Свойство SupportsDynamicPartitions в разделителе sourcePartitioner возвращает значение false или разделитель возвращает части со значением null.

Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.

Комментарии

Эта перегрузка предоставляется для сценариев, в которых требуется переопределить схему секционирования по умолчанию. Например, небольшие тела цикла могут воспользоваться преимуществами секционирования диапазона. Метод ForEach ожидает, что пользовательские секционеры будут поддерживать динамическое секционирование. Дополнительные сведения см. в разделах Пользовательские секционаторы для PLINQ и TPL и Практическое руководство. Реализация динамических секций.

Делегат localInit вызывается один раз для каждой задачи, которая участвует в выполнении цикла, и возвращает начальное локальное состояние для каждой из этих задач. Эти начальные состояния передаются в первые body вызовы для каждой задачи. Затем каждый последующий вызов текста возвращает возможно измененное значение состояния, которое передается следующему вызову текста. Наконец, последний вызов текста для каждой задачи возвращает значение состояния, которое передается делегату localFinally . Делегат localFinally вызывается один раз для каждой задачи для выполнения окончательного действия в локальном состоянии каждой задачи. Этот делегат может вызываться одновременно для нескольких задач; Поэтому необходимо синхронизировать доступ ко всем общим переменным.

Метод Parallel.ForEach может использовать больше задач, чем потоки в течение всего времени его выполнения, так как существующие задачи выполняются и заменяются новыми задачами. Это дает базовому TaskScheduler объекту возможность добавлять, изменять или удалять потоки, обслуживающие цикл.

См. также раздел

Применяется к

ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций и настройки параметров цикла.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Action<TSource> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Generic.IEnumerable<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Action<TSource> body);
static member ForEach : seq<'Source> * System.Threading.Tasks.ParallelOptions * Action<'Source> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As IEnumerable(Of TSource), parallelOptions As ParallelOptions, body As Action(Of TSource)) As ParallelLoopResult

Параметры типа

TSource

Тип данных в источнике.

Параметры

source
IEnumerable<TSource>

Перечислимый источник данных.

parallelOptions
ParallelOptions

Объект, используемый для настройки поведения этой операции.

body
Action<TSource>

Делегат, который вызывается один раз за итерацию.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Токен CancellationToken в аргументе parallelOptions отменен

Аргумент source имеет значение null.

-или-

Аргумент parallelOptions имеет значение null.

-или-

Аргумент body имеет значение null.

Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.

CancellationTokenSource, связанный с CancellationToken в parallelOptions, удален.

Комментарии

Делегат body вызывается один раз для каждого элемента в source перечисляемом объекте . Он предоставляется с текущим элементом в качестве параметра.

См. также раздел

Применяется к

ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Action<TSource, System::Threading::Tasks::ParallelLoopState ^> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Generic.IEnumerable<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Action<TSource,System.Threading.Tasks.ParallelLoopState> body);
static member ForEach : seq<'Source> * System.Threading.Tasks.ParallelOptions * Action<'Source, System.Threading.Tasks.ParallelLoopState> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As IEnumerable(Of TSource), parallelOptions As ParallelOptions, body As Action(Of TSource, ParallelLoopState)) As ParallelLoopResult

Параметры типа

TSource

Тип данных в источнике.

Параметры

source
IEnumerable<TSource>

Перечислимый источник данных.

parallelOptions
ParallelOptions

Объект, используемый для настройки поведения этой операции.

body
Action<TSource,ParallelLoopState>

Делегат, который вызывается один раз за итерацию.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Токен CancellationToken в аргументе parallelOptions отменен

Аргумент source имеет значение null.

-или-

Аргумент parallelOptions имеет значение null.

-или-

Аргумент body имеет значение null.

Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.

CancellationTokenSource, связанный с CancellationToken в parallelOptions, удален.

Комментарии

Делегат body вызывается один раз для каждого элемента в source перечисляемом объекте . Он предоставляется со следующими параметрами: текущим элементом и экземпляром ParallelLoopState , который может использоваться для преждевременного выхода из цикла.

См. также раздел

Применяется к

ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) для объекта OrderablePartitioner<TSource>, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::OrderablePartitioner<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Action<TSource, System::Threading::Tasks::ParallelLoopState ^, long> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Concurrent.OrderablePartitioner<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Action<TSource,System.Threading.Tasks.ParallelLoopState,long> body);
static member ForEach : System.Collections.Concurrent.OrderablePartitioner<'Source> * System.Threading.Tasks.ParallelOptions * Action<'Source, System.Threading.Tasks.ParallelLoopState, int64> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As OrderablePartitioner(Of TSource), parallelOptions As ParallelOptions, body As Action(Of TSource, ParallelLoopState, Long)) As ParallelLoopResult

Параметры типа

TSource

Тип элементов в объекте source.

Параметры

source
OrderablePartitioner<TSource>

Упорядочиваемый разделитель, содержащий исходный источник данных.

parallelOptions
ParallelOptions

Объект, используемый для настройки поведения этой операции.

body
Action<TSource,ParallelLoopState,Int64>

Делегат, который вызывается один раз за итерацию.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Токен CancellationToken в аргументе parallelOptions отменен

Аргумент source имеет значение null.

-или-

Аргумент parallelOptions имеет значение null.

-или-

Аргумент body имеет значение null.

CancellationTokenSource, связанный с CancellationToken в parallelOptions, удален.

Свойство SupportsDynamicPartitions в упорядочиваемом разделителе source возвращает значение false.

-или-

Свойство KeysNormalized в упорядочиваемом разделителе source возвращает значение false.

-или-

Исключение, которое возникает, когда методы в упорядочиваемом разделителе source возвращают значение null.

Исключение, которое содержит исключение, созданное одним из указанных делегатов.

Комментарии

Эта перегрузка предоставляется для сценариев, в которых требуется переопределить схему секционирования по умолчанию. Например, небольшие тела цикла могут воспользоваться преимуществами секционирования диапазона. Метод Parallel.ForEach ожидает, что пользовательские секционеры будут поддерживать динамическое секционирование. Дополнительные сведения см. в разделах Пользовательские секционаторы для PLINQ и TPL и Практическое руководство. Реализация динамических секций.

См. также раздел

Применяется к

ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) для объекта Partitioner, обеспечивая возможность параллельного выполнения итераций и настройки параметров цикла.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::Partitioner<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Action<TSource> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Concurrent.Partitioner<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Action<TSource> body);
static member ForEach : System.Collections.Concurrent.Partitioner<'Source> * System.Threading.Tasks.ParallelOptions * Action<'Source> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As Partitioner(Of TSource), parallelOptions As ParallelOptions, body As Action(Of TSource)) As ParallelLoopResult

Параметры типа

TSource

Тип элементов в объекте source.

Параметры

source
Partitioner<TSource>

Разделитель, содержащий исходный источник данных.

parallelOptions
ParallelOptions

Объект, используемый для настройки поведения этой операции.

body
Action<TSource>

Делегат, который вызывается один раз за итерацию.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Токен CancellationToken в аргументе parallelOptions отменен.

CancellationTokenSource, связанный с CancellationToken в parallelOptions, удален.

Аргумент source имеет значение null.

-или-

Аргумент parallelOptions имеет значение null.

-или-

Аргумент body имеет значение null.

Свойство SupportsDynamicPartitions в разделителе source возвращает false.

-или-

Исключение, которое возникает, когда какие-либо методы в разделителе source возвращают значение null.

Исключение, которое содержит исключение, созданное одним из указанных делегатов.

Комментарии

Эта перегрузка предоставляется для сценариев, в которых требуется переопределить схему секционирования по умолчанию. Например, небольшие тела цикла могут воспользоваться преимуществами секционирования диапазона. Метод Parallel.ForEach ожидает, что пользовательские секционеры будут поддерживать динамическое секционирование. Дополнительные сведения см. в разделах Пользовательские секционаторы для PLINQ и TPL и Практическое руководство. Реализация динамических секций.

См. также раздел

Применяется к

ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) с 64-разрядными индексами для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Action<TSource, System::Threading::Tasks::ParallelLoopState ^, long> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Generic.IEnumerable<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Action<TSource,System.Threading.Tasks.ParallelLoopState,long> body);
static member ForEach : seq<'Source> * System.Threading.Tasks.ParallelOptions * Action<'Source, System.Threading.Tasks.ParallelLoopState, int64> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As IEnumerable(Of TSource), parallelOptions As ParallelOptions, body As Action(Of TSource, ParallelLoopState, Long)) As ParallelLoopResult

Параметры типа

TSource

Тип данных в источнике.

Параметры

source
IEnumerable<TSource>

Перечислимый источник данных.

parallelOptions
ParallelOptions

Объект, используемый для настройки поведения этой операции.

body
Action<TSource,ParallelLoopState,Int64>

Делегат, который вызывается один раз за итерацию.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Токен CancellationToken в аргументе parallelOptions отменен

Аргумент source имеет значение null.

-или-

Аргумент parallelOptions имеет значение null.

-или-

Аргумент body имеет значение null.

Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.

CancellationTokenSource, связанный с CancellationToken в parallelOptions, удален.

Комментарии

Делегат body вызывается один раз для каждого элемента в source перечисляемом объекте . Он предоставляется со следующими параметрами: текущий элемент, экземпляр, ParallelLoopState который может использоваться для преждевременного выхода из цикла, и индекс текущего элемента (Int64).

См. также раздел

Применяется к

ForEach<TSource>(Partitioner<TSource>, Action<TSource,ParallelLoopState>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) для объекта Partitioner, обеспечивая возможность параллельного выполнения итераций, а также контроля состояния цикла и управления этим состоянием.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::Partitioner<TSource> ^ source, Action<TSource, System::Threading::Tasks::ParallelLoopState ^> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Concurrent.Partitioner<TSource> source, Action<TSource,System.Threading.Tasks.ParallelLoopState> body);
static member ForEach : System.Collections.Concurrent.Partitioner<'Source> * Action<'Source, System.Threading.Tasks.ParallelLoopState> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As Partitioner(Of TSource), body As Action(Of TSource, ParallelLoopState)) As ParallelLoopResult

Параметры типа

TSource

Тип элементов в объекте source.

Параметры

source
Partitioner<TSource>

Разделитель, содержащий исходный источник данных.

body
Action<TSource,ParallelLoopState>

Делегат, который вызывается один раз за итерацию.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Аргумент source имеет значение null.

-или-

Аргумент body имеет значение null.

Свойство SupportsDynamicPartitions в разделителе source возвращает false.

-или-

Метод в разделителе source возвращает null.

-или-

Метод GetPartitions(Int32) в разделителе source не возвращает правильное число разделов.

Исключение, которое содержит исключение, созданное одним из указанных делегатов.

Комментарии

Эта перегрузка предоставляется для сценариев, в которых требуется переопределить схему секционирования по умолчанию. Например, небольшие тела цикла могут воспользоваться преимуществами секционирования диапазона. Метод Parallel.ForEach ожидает, что пользовательские секционеры будут поддерживать динамическое секционирование. Дополнительные сведения см. в разделах Пользовательские секционаторы для PLINQ и TPL и Практическое руководство. Реализация динамических секций.

См. также раздел

Применяется к

ForEach<TSource>(Partitioner<TSource>, Action<TSource>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) для объекта Partitioner, обеспечивая возможность параллельного выполнения итераций.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::Partitioner<TSource> ^ source, Action<TSource> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Concurrent.Partitioner<TSource> source, Action<TSource> body);
static member ForEach : System.Collections.Concurrent.Partitioner<'Source> * Action<'Source> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As Partitioner(Of TSource), body As Action(Of TSource)) As ParallelLoopResult

Параметры типа

TSource

Тип элементов в объекте source.

Параметры

source
Partitioner<TSource>

Разделитель, содержащий исходный источник данных.

body
Action<TSource>

Делегат, который вызывается один раз за итерацию.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Аргумент source имеет значение null.

-или-

Аргумент body имеет значение null.

Свойство SupportsDynamicPartitions в разделителе source возвращает false.

-или-

Исключение, которое возникает, когда какие-либо методы в разделителе source возвращают значение null.

-или-

Метод GetPartitions(Int32) в разделителе source не возвращает правильное число разделов.

Исключение, которое содержит исключение, созданное одним из указанных делегатов.

Примеры

В следующем примере показано, как реализовать разделитель диапазона для использования с Parallel.ForEach:

using System;
using System.Collections.Concurrent;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;

class RangePartitionerDemo 
{
        static void Main()
        {
            Stopwatch sw = null;

            long sum = 0;
            long SUMTOP = 10000000;

            // Try sequential for
            sw = Stopwatch.StartNew();
            for (long i = 0; i < SUMTOP; i++) sum += i;
            sw.Stop();
            Console.WriteLine("sequential for result = {0}, time = {1} ms", sum, sw.ElapsedMilliseconds);

            // Try parallel for -- this is slow!
            //sum = 0;
            //sw = Stopwatch.StartNew();
            //Parallel.For(0L, SUMTOP, (item) => Interlocked.Add(ref sum, item));
            //sw.Stop();
            //Console.WriteLine("parallel for  result = {0}, time = {1} ms", sum, sw.ElapsedMilliseconds);

            // Try parallel for with locals
            sum = 0;
            sw = Stopwatch.StartNew();
            Parallel.For(0L, SUMTOP, () => 0L, (item, state, prevLocal) => prevLocal + item, local => Interlocked.Add(ref sum, local));
            sw.Stop();
            Console.WriteLine("parallel for w/locals result = {0}, time = {1} ms", sum, sw.ElapsedMilliseconds);

            // Try range partitioner
            sum = 0;
            sw = Stopwatch.StartNew();
            Parallel.ForEach(Partitioner.Create(0L, SUMTOP), (range) =>
            {
                long local = 0;
                for (long i = range.Item1; i < range.Item2; i++) local += i;
                Interlocked.Add(ref sum, local);
            });
            sw.Stop();
            Console.WriteLine("range partitioner result = {0}, time = {1} ms", sum, sw.ElapsedMilliseconds);
        }
}
Imports System.Collections.Concurrent
Imports System.Threading
Imports System.Threading.Tasks

Module RangePartitionerDemo

    Sub Main()
        Dim sw As Stopwatch = Nothing

        Dim sum As Long = 0
        Dim SUMTOP As Long = 10000000

        ' Try sequential for
        sw = Stopwatch.StartNew()
        For i As Long = 0 To SUMTOP - 1
            sum += i
        Next
        sw.Stop()
        Console.WriteLine("sequential for result = {0}, time = {1} ms", sum, sw.ElapsedMilliseconds)

        ' Try parallel for with locals
        sum = 0
        sw = Stopwatch.StartNew()
        Parallel.For(0L, SUMTOP, Function() 0L, Function(item, state, prevLocal) prevLocal + item, Function(local) Interlocked.Add(sum, local))
        sw.Stop()
        Console.WriteLine("parallel for w/locals result = {0}, time = {1} ms", sum, sw.ElapsedMilliseconds)

        ' Try range partitioner
        sum = 0
        sw = Stopwatch.StartNew()
        Parallel.ForEach(Partitioner.Create(0L, SUMTOP),
                         Sub(range)
                             Dim local As Long = 0
                             For i As Long = range.Item1 To range.Item2 - 1
                                 local += i
                             Next
                             Interlocked.Add(sum, local)
                         End Sub)
        sw.Stop()
        Console.WriteLine("range partitioner result = {0}, time = {1} ms", sum, sw.ElapsedMilliseconds)
    End Sub

End Module

Комментарии

Эта перегрузка предоставляется для сценариев, в которых требуется переопределить схему секционирования по умолчанию. Например, небольшие тела цикла могут воспользоваться преимуществами секционирования диапазона. Метод Parallel.ForEach ожидает, что пользовательские секционеры будут поддерживать динамическое секционирование. Дополнительные сведения см. в разделах Пользовательские секционаторы для PLINQ и TPL и Практическое руководство. Реализация динамических секций.

См. также раздел

Применяется к

ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState,Int64>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) с 64-разрядными индексами для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, а также контроля состояния цикла и управления этим состоянием.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, Action<TSource, System::Threading::Tasks::ParallelLoopState ^, long> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Generic.IEnumerable<TSource> source, Action<TSource,System.Threading.Tasks.ParallelLoopState,long> body);
static member ForEach : seq<'Source> * Action<'Source, System.Threading.Tasks.ParallelLoopState, int64> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As IEnumerable(Of TSource), body As Action(Of TSource, ParallelLoopState, Long)) As ParallelLoopResult

Параметры типа

TSource

Тип данных в источнике.

Параметры

source
IEnumerable<TSource>

Перечислимый источник данных.

body
Action<TSource,ParallelLoopState,Int64>

Делегат, который вызывается один раз за итерацию.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Аргумент source имеет значение null.

-или-

Аргумент body имеет значение null.

Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.

Комментарии

Делегат body вызывается один раз для каждого элемента в source перечисляемом объекте . Он предоставляется со следующими параметрами: текущий элемент, экземпляр, ParallelLoopState который может использоваться для преждевременного выхода из цикла, и индекс текущего элемента (Int64).

См. также раздел

Применяется к

ForEach<TSource>(OrderablePartitioner<TSource>, Action<TSource,ParallelLoopState,Int64>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) для объекта OrderablePartitioner<TSource>, обеспечивая возможность параллельного выполнения итераций, а также контроля состояния цикла и управления этим состоянием.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::OrderablePartitioner<TSource> ^ source, Action<TSource, System::Threading::Tasks::ParallelLoopState ^, long> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Concurrent.OrderablePartitioner<TSource> source, Action<TSource,System.Threading.Tasks.ParallelLoopState,long> body);
static member ForEach : System.Collections.Concurrent.OrderablePartitioner<'Source> * Action<'Source, System.Threading.Tasks.ParallelLoopState, int64> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As OrderablePartitioner(Of TSource), body As Action(Of TSource, ParallelLoopState, Long)) As ParallelLoopResult

Параметры типа

TSource

Тип элементов в объекте source.

Параметры

source
OrderablePartitioner<TSource>

Упорядочиваемый разделитель, содержащий исходный источник данных.

body
Action<TSource,ParallelLoopState,Int64>

Делегат, который вызывается один раз за итерацию.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Аргумент source имеет значение null.

-или-

Аргумент body имеет значение null.

Свойство SupportsDynamicPartitions в упорядочиваемом разделителе source возвращает значение false.

-или-

Свойство KeysNormalized в упорядочиваемом разделителе источника возвращает значение false.

-или-

Все методы в упорядочиваемом модуле разделения источника возвращают null.

Исключение, порождаемое одним из указанных делегатов.

Комментарии

Эта перегрузка предоставляется для сценариев, в которых требуется переопределить схему секционирования по умолчанию. Например, небольшие тела цикла могут воспользоваться преимуществами секционирования диапазона. Метод Parallel.ForEach ожидает, что пользовательские секционеры будут поддерживать динамическое секционирование. Дополнительные сведения см. в разделах Пользовательские секционаторы для PLINQ и TPL и Практическое руководство. Реализация динамических секций.

См. также раздел

Применяется к

ForEach<TSource>(IEnumerable<TSource>, Action<TSource>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, Action<TSource> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Generic.IEnumerable<TSource> source, Action<TSource> body);
static member ForEach : seq<'Source> * Action<'Source> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As IEnumerable(Of TSource), body As Action(Of TSource)) As ParallelLoopResult

Параметры типа

TSource

Тип данных в источнике.

Параметры

source
IEnumerable<TSource>

Перечислимый источник данных.

body
Action<TSource>

Делегат, который вызывается один раз за итерацию.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Аргумент source имеет значение null.

-или-

Аргумент body имеет значение null.

Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.

Примеры

В следующем примере метод используется ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) для подсчета количества гласных и символов, не являющихся пробелами, в текстовом файле. В этом случае значение, возвращаемое методом , ParallelLoopResult игнорируется. Обратите внимание, что поскольку операции могут выполняться параллельно, необходимо убедиться, что увеличение переменных счетчика является атомарной операцией и что несколько потоков не пытаются получить доступ к переменным счетчика одновременно. Для этой цели в примере используется lock оператор (в C#) и SyncLock оператор (в Visual Basic).

using System;
using System.IO;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      Task<String> task = ReadCharacters(@".\CallOfTheWild.txt");
      String text = task.Result;
      
      int nVowels = 0;
      int nNonWhiteSpace = 0;
      Object obj = new Object();

      ParallelLoopResult result = Parallel.ForEach(text, 
                                                   (ch) => {
                                                      Char uCh = Char.ToUpper(ch);
                                                      if ("AEIOUY".IndexOf(uCh) >= 0) {
                                                         lock (obj) {
                                                            nVowels++;
                                                         }
                                                      }
                                                      if (!Char.IsWhiteSpace(uCh)) {
                                                         lock (obj) {
                                                            nNonWhiteSpace++;
                                                         }   
                                                      }
                                                   } );
      Console.WriteLine("Total characters:      {0,10:N0}", text.Length);
      Console.WriteLine("Total vowels:          {0,10:N0}", nVowels);
      Console.WriteLine("Total non-white-space:  {0,10:N0}", nNonWhiteSpace);
   }

   private static async Task<String> ReadCharacters(String fn)
   {
      String text;
      using (StreamReader sr = new StreamReader(fn)) {
         text = await sr.ReadToEndAsync();
      }
      return text;
   }
}
// The example displays output like the following:
//       Total characters:         198,548
//       Total vowels:              58,421
//       Total non-white-space:     159,461
Imports System.IO
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim task As Task(Of String) = ReadCharacters(".\CallOfTheWild.txt")
      Dim text As String = task.Result
      
      Dim nVowels As Integer = 0
      Dim nNonWhiteSpace As Integer = 0
      Dim obj As New Object()

      Dim result As ParallelLoopResult = Parallel.ForEach(text, 
                                                          Sub(ch)
                                                             Dim uCh As Char = Char.ToUpper(ch)
                                                             If "AEIOUY".IndexOf(uCh) >= 0 Then
                                                                SyncLock obj
                                                                   nVowels += 1
                                                                End SyncLock
                                                             End If
                                                             If Not Char.IsWhiteSpace(uCh) Then
                                                                SyncLock obj
                                                                   nNonWhiteSpace += 1
                                                                End SyncLock   
                                                             End If
                                                          End Sub)
      Console.WriteLine("Total characters:      {0,10:N0}", text.Length)
      Console.WriteLine("Total vowels:          {0,10:N0}", nVowels)
      Console.WriteLine("Total non-white space:  {0,10:N0}", nNonWhiteSpace)
   End Sub
   
   Private Async Function ReadCharacters(fn As String) As Task(Of String)
      Dim text As String
      Using sr As New StreamReader(fn)
         text = Await sr.ReadToEndAsync()
      End Using
      Return text
   End Function
End Module
' The output from the example resembles the following:
'       Total characters:         198,548
'       Total vowels:              58,421
'       Total non-white space:     159,461

Комментарии

Делегат body вызывается один раз для каждого элемента в source перечисляемом объекте . Он предоставляется с текущим элементом в качестве параметра.

См. также раздел

Применяется к

ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) для объекта Partitioner, обеспечивая возможность параллельного выполнения итераций, настройки параметров цикла, а также контроля состояния цикла и управления этим состоянием.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::Partitioner<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Action<TSource, System::Threading::Tasks::ParallelLoopState ^> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Concurrent.Partitioner<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Action<TSource,System.Threading.Tasks.ParallelLoopState> body);
static member ForEach : System.Collections.Concurrent.Partitioner<'Source> * System.Threading.Tasks.ParallelOptions * Action<'Source, System.Threading.Tasks.ParallelLoopState> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As Partitioner(Of TSource), parallelOptions As ParallelOptions, body As Action(Of TSource, ParallelLoopState)) As ParallelLoopResult

Параметры типа

TSource

Тип элементов в объекте source.

Параметры

source
Partitioner<TSource>

Разделитель, содержащий исходный источник данных.

parallelOptions
ParallelOptions

Объект, используемый для настройки поведения этой операции.

body
Action<TSource,ParallelLoopState>

Делегат, который вызывается один раз за итерацию.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Токен CancellationToken в аргументе parallelOptions отменен.

CancellationTokenSource, связанный с CancellationToken в parallelOptions, удален.

Аргумент source имеет значение null.

-или-

Аргумент parallelOptions имеет значение null.

-или-

Аргумент body имеет значение null.

Свойство SupportsDynamicPartitions в разделителе source возвращает false.

-или-

Исключение, которое возникает, когда какие-либо методы в разделителе source возвращают значение null.

Исключение, которое содержит исключение, созданное одним из указанных делегатов.

Комментарии

Эта перегрузка предоставляется для сценариев, в которых требуется переопределить схему секционирования по умолчанию. Например, небольшие тела цикла могут воспользоваться преимуществами секционирования диапазона. Метод Parallel.ForEach ожидает, что пользовательские секционеры будут поддерживать динамическое секционирование. Дополнительные сведения см. в разделах Пользовательские секционаторы для PLINQ и TPL и Практическое руководство. Реализация динамических секций.

См. также раздел

Применяется к

ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState>)

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs

Выполняет операцию foreach (For Each в Visual Basic) для объекта IEnumerable, обеспечивая возможность параллельного выполнения итераций, а также контроля состояния цикла и управления этим состоянием.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, Action<TSource, System::Threading::Tasks::ParallelLoopState ^> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Generic.IEnumerable<TSource> source, Action<TSource,System.Threading.Tasks.ParallelLoopState> body);
static member ForEach : seq<'Source> * Action<'Source, System.Threading.Tasks.ParallelLoopState> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As IEnumerable(Of TSource), body As Action(Of TSource, ParallelLoopState)) As ParallelLoopResult

Параметры типа

TSource

Тип данных в источнике.

Параметры

source
IEnumerable<TSource>

Перечислимый источник данных.

body
Action<TSource,ParallelLoopState>

Делегат, который вызывается один раз за итерацию.

Возвращаемое значение

Структура, в которой содержатся сведения о выполненной части цикла.

Исключения

Аргумент source имеет значение null.

-или-

Аргумент body имеет значение null.

Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.

Комментарии

Делегат body вызывается один раз для каждого элемента в source перечисляемом объекте . Он предоставляется со следующими параметрами: текущим элементом и экземпляром ParallelLoopState , который может использоваться для преждевременного выхода из цикла.

См. также раздел

Применяется к