Parallel.ForEach Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Выполняет операцию foreach
(For Each
в Visual Basic), обеспечивая возможность параллельного выполнения итераций.
Перегрузки
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Выполняет операцию |
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Выполняет операцию |
ForEach<TSource,TLocal>(Partitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Выполняет операцию |
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
|
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Выполняет операцию |
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Выполняет операцию |
ForEach<TSource,TLocal>(Partitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Выполняет операцию |
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Выполняет операцию |
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource>) |
Выполняет операцию |
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>) |
Выполняет операцию |
ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>) |
Выполняет операцию |
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource>) |
Выполняет операцию |
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>) |
Выполняет операцию |
ForEach<TSource>(Partitioner<TSource>, Action<TSource,ParallelLoopState>) |
Выполняет операцию |
ForEach<TSource>(Partitioner<TSource>, Action<TSource>) |
Выполняет операцию |
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState,Int64>) |
Выполняет операцию |
ForEach<TSource>(OrderablePartitioner<TSource>, Action<TSource,ParallelLoopState,Int64>) |
Выполняет операцию |
ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) |
Выполняет операцию |
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>) |
Выполняет операцию |
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState>) |
Выполняет операцию |
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 в разделителе source
Partitioner возвращает значение 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
Тип данных, локальных для потока.
Параметры
Упорядочиваемый разделитель, содержащий исходный источник данных.
- 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 в разделителе source
Partitioner возвращает значение 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 в разделителе source
Partitioner возвращает значение 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
Тип данных, локальных для потока.
Параметры
Упорядочиваемый разделитель, содержащий исходный источник данных.
- localInit
- Func<TLocal>
Делегат функции, который возвращает начальное состояние локальных данных для каждой задачи.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Делегат, который вызывается один раз за итерацию.
- localFinally
- Action<TLocal>
Делегат, который выполняет финальное действие с локальным состоянием каждой задачи.
Возвращаемое значение
Структура, в которой содержатся сведения о выполненной части цикла.
Исключения
Аргумент source
имеет значение null
.
-или-
Аргумент body
имеет значение null
.
-или-
Аргумент localInit
имеет значение null
.
-или-
Аргумент localFinally
имеет значение null
.
Свойство SupportsDynamicPartitions в разделителе source
Partitioner возвращает значение 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
.
Параметры
Упорядочиваемый разделитель, содержащий исходный источник данных.
- 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>
Делегат, который вызывается один раз за итерацию.
Возвращаемое значение
Структура, в которой содержатся сведения о выполненной части цикла.
Исключения
Свойство 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>
Делегат, который вызывается один раз за итерацию.
Возвращаемое значение
Структура, в которой содержатся сведения о выполненной части цикла.
Исключения
Свойство 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>
Делегат, который вызывается один раз за итерацию.
Возвращаемое значение
Структура, в которой содержатся сведения о выполненной части цикла.
Исключения
Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.
Комментарии
Делегат 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
.
Параметры
Упорядочиваемый разделитель, содержащий исходный источник данных.
- body
- Action<TSource,ParallelLoopState,Int64>
Делегат, который вызывается один раз за итерацию.
Возвращаемое значение
Структура, в которой содержатся сведения о выполненной части цикла.
Исключения
Свойство 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>
Делегат, который вызывается один раз за итерацию.
Возвращаемое значение
Структура, в которой содержатся сведения о выполненной части цикла.
Исключения
Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.
Примеры
В следующем примере метод используется 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>
Делегат, который вызывается один раз за итерацию.
Возвращаемое значение
Структура, в которой содержатся сведения о выполненной части цикла.
Исключения
Исключение, которое содержит все отдельные исключения, создаваемые во всех потоках.
Комментарии
Делегат body
вызывается один раз для каждого элемента в source
перечисляемом объекте . Он предоставляется со следующими параметрами: текущим элементом и экземпляром ParallelLoopState , который может использоваться для преждевременного выхода из цикла.