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
- Исходный код:
- 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 отменен.
Связанный CancellationTokenSourceCancellationToken с ним 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
- Исходный код:
- 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 отменен.
Связанный CancellationTokenSourceCancellationToken с ним 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
- Исходный код:
- 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 в возвращаемом false объекте sourcePartitioner или секционатор возвращает null секции.
Исключение, содержащее все отдельные исключения, создаваемые во всех потоках.
CancellationToken Аргумент parallelOptions отменен.
Связанный CancellationTokenSourceCancellationToken с ним 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
- Исходный код:
- 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.
–или–
localFinally Аргумент localInit или аргумент null.
Свойство SupportsDynamicPartitions в возвращаемом false объекте sourcePartitioner или секционатор возвращает null секции.
Исключение, содержащее все отдельные исключения, создаваемые во всех потоках.
CancellationToken Аргумент parallelOptions отменен.
Связанный CancellationTokenSourceCancellationToken с ним 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
- Исходный код:
- 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
- Исходный код:
- 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
- Исходный код:
- 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 в возвращаемом false объекте sourcePartitioner или секционатор возвращает 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
- Исходный код:
- 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 в возвращаемом false объекте sourcePartitioner или секционатор возвращает null секции.
Исключение, содержащее все отдельные исключения, создаваемые во всех потоках.
Комментарии
Эта перегрузка предоставляется для сценариев, в которых требуется переопределить схему секционирования по умолчанию. Например, небольшие тела цикла могут воспользоваться секционированием диапазона. Метод ForEach ожидает, что пользовательские секционеры поддерживают динамическую секционирование. Дополнительные сведения см. в разделах Настраиваемые секционеры для PLINQ и TPL ипрактическое руководство. Реализация динамических секций.
Делегат localInit вызывается один раз для каждой задачи, которая участвует в выполнении цикла и возвращает начальное локальное состояние для каждой из этих задач. Эти начальные состояния передаются первым body вызовам для каждой задачи. Затем каждый последующий вызов тела возвращает возможно измененное значение состояния, передаваемое следующему вызову тела. Наконец, последний вызов текста для каждой задачи возвращает значение состояния, переданное делегату localFinally . Делегат localFinally вызывается один раз для каждой задачи, чтобы выполнить окончательное действие по локальному состоянию каждой задачи. Этот делегат может вызываться одновременно для нескольких задач; таким образом, необходимо синхронизировать доступ к любым общим переменным.
Метод Parallel.ForEach может использовать больше задач, чем потоки в течение всего времени его выполнения, так как существующие задачи выполняются и заменяются новыми задачами. Это дает базовому TaskScheduler объекту возможность добавлять, изменять или удалять потоки, которые обслуживают цикл.
Применяется к
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource>)
- Исходный код:
- Parallel.cs
- Исходный код:
- Parallel.cs
- Исходный код:
- 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>
Делегат, который вызывается один раз для каждой итерации.
Возвращаемое значение
Структура, содержащая сведения о том, какая часть цикла завершена.
Исключения
parallelOptions Аргумент CancellationToken отменен
Аргумент source имеет значение null.
–или–
Аргумент parallelOptions имеет значение null.
–или–
Аргумент body имеет значение null.
Исключение, содержащее все отдельные исключения, создаваемые во всех потоках.
Связанный CancellationTokenSourceCancellationToken с ним parallelOptions объект удален.
Комментарии
Делегат body вызывается один раз для каждого элемента в source перечислении. Он предоставляется текущим элементом в качестве параметра.
Применяется к
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)
- Исходный код:
- Parallel.cs
- Исходный код:
- Parallel.cs
- Исходный код:
- 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>
Делегат, который вызывается один раз для каждой итерации.
Возвращаемое значение
Структура, содержащая сведения о том, какая часть цикла завершена.
Исключения
parallelOptions Аргумент CancellationToken отменен
Аргумент source имеет значение null.
–или–
Аргумент parallelOptions имеет значение null.
–или–
Аргумент body имеет значение null.
Исключение, содержащее все отдельные исключения, создаваемые во всех потоках.
Связанный CancellationTokenSourceCancellationToken с ним parallelOptions объект удален.
Комментарии
Делегат body вызывается один раз для каждого элемента в source перечислении. Он предоставляется со следующими параметрами: текущим элементом и экземпляром ParallelLoopState , который может использоваться для прерывания цикла преждевременно.
Применяется к
ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)
- Исходный код:
- Parallel.cs
- Исходный код:
- Parallel.cs
- Исходный код:
- 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>
Делегат, который вызывается один раз для каждой итерации.
Возвращаемое значение
Структура, содержащая сведения о том, какая часть цикла завершена.
Исключения
parallelOptions Аргумент CancellationToken отменен
Аргумент source имеет значение null.
–или–
Аргумент parallelOptions имеет значение null.
–или–
Аргумент body имеет значение null.
Связанный CancellationTokenSourceCancellationToken с ним parallelOptions объект удален.
Свойство SupportsDynamicPartitions в упорядоченном секционаторе source возвращается false.
–или–
Свойство KeysNormalized в упорядоченном секционаторе source возвращается false.
–или–
Исключение, которое возникает при возврате nullлюбых методов в возвращаемом объекте source секционатора с упорядоченным порядком.
Исключение, которое вызывается для хранения исключения, возникающего из одного из указанных делегатов.
Комментарии
Эта перегрузка предоставляется для сценариев, в которых требуется переопределить схему секционирования по умолчанию. Например, небольшие тела цикла могут воспользоваться секционированием диапазона. Метод Parallel.ForEach ожидает, что пользовательские секционеры поддерживают динамическую секционирование. Дополнительные сведения см. в разделах Настраиваемые секционеры для PLINQ и TPL ипрактическое руководство. Реализация динамических секций.
Применяется к
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource>)
- Исходный код:
- Parallel.cs
- Исходный код:
- Parallel.cs
- Исходный код:
- 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 отменен.
Связанный CancellationTokenSourceCancellationToken с ним parallelOptions объект удален.
Аргумент source имеет значение null.
–или–
Аргумент parallelOptions имеет значение null.
–или–
Аргумент body имеет значение null.
Свойство SupportsDynamicPartitions в секционаторе source возвращается false.
–или–
Исключение, которое возникает при возврате nullлюбых методов в объекте source секционирования.
Исключение, которое вызывается для хранения исключения, возникающего из одного из указанных делегатов.
Комментарии
Эта перегрузка предоставляется для сценариев, в которых требуется переопределить схему секционирования по умолчанию. Например, небольшие тела цикла могут воспользоваться секционированием диапазона. Метод Parallel.ForEach ожидает, что пользовательские секционеры поддерживают динамическую секционирование. Дополнительные сведения см. в разделах Настраиваемые секционеры для PLINQ и TPL ипрактическое руководство. Реализация динамических секций.
Применяется к
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)
- Исходный код:
- Parallel.cs
- Исходный код:
- Parallel.cs
- Исходный код:
- 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>
Делегат, который вызывается один раз для каждой итерации.
Возвращаемое значение
Структура, содержащая сведения о том, какая часть цикла завершена.
Исключения
parallelOptions Аргумент CancellationToken отменен
Аргумент source имеет значение null.
–или–
Аргумент parallelOptions имеет значение null.
–или–
Аргумент body имеет значение null.
Исключение, содержащее все отдельные исключения, создаваемые во всех потоках.
Связанный CancellationTokenSourceCancellationToken с ним parallelOptions объект удален.
Комментарии
Делегат body вызывается один раз для каждого элемента в source перечислении. Он предоставляется со следующими параметрами: текущий элемент, экземпляр, ParallelLoopState который может использоваться для прерывания цикла преждевременно, и индекс текущего элемента (Int64).
Применяется к
ForEach<TSource>(Partitioner<TSource>, Action<TSource,ParallelLoopState>)
- Исходный код:
- Parallel.cs
- Исходный код:
- Parallel.cs
- Исходный код:
- 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
- Исходный код:
- 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.
–или–
Исключение, которое возникает при возврате nullлюбых методов в объекте source секционирования.
–или–
Метод 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
- Исходный код:
- 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
- Исходный код:
- 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
- Исходный код:
- 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
- Исходный код:
- 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 отменен.
Связанный CancellationTokenSourceCancellationToken с ним parallelOptions объект удален.
Аргумент source имеет значение null.
–или–
Аргумент parallelOptions имеет значение null.
–или–
Аргумент body имеет значение null.
Свойство SupportsDynamicPartitions в секционаторе source возвращается false.
–или–
Исключение, которое возникает при возврате nullлюбых методов в объекте source секционирования.
Исключение, которое вызывается для хранения исключения, возникающего из одного из указанных делегатов.
Комментарии
Эта перегрузка предоставляется для сценариев, в которых требуется переопределить схему секционирования по умолчанию. Например, небольшие тела цикла могут воспользоваться секционированием диапазона. Метод Parallel.ForEach ожидает, что пользовательские секционеры поддерживают динамическую секционирование. Дополнительные сведения см. в разделах Настраиваемые секционеры для PLINQ и TPL ипрактическое руководство. Реализация динамических секций.
Применяется к
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState>)
- Исходный код:
- Parallel.cs
- Исходный код:
- Parallel.cs
- Исходный код:
- 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 , который может использоваться для прерывания цикла преждевременно.