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


Parallel.ForEach Метод

Определение

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

Перегрузки

Имя Описание
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
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

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

Параметры

source
OrderablePartitioner<TSource>

Упорядоченный секционатор, содержащий исходный источник данных.

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

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

Параметры

source
OrderablePartitioner<TSource>

Упорядоченный секционатор, содержащий исходный источник данных.

localInit
Func<TLocal>

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

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

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

localFinally
Action<TLocal>

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

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

Структура, содержащая сведения о том, какая часть цикла завершена.

Исключения

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

–или–

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

–или–

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

–или–

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

Свойство SupportsDynamicPartitions в возвращаемом 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.

Параметры

source
OrderablePartitioner<TSource>

Упорядоченный секционатор, содержащий исходный источник данных.

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>

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

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

Структура, содержащая сведения о том, какая часть цикла завершена.

Исключения

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

–или–

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

Свойство SupportsDynamicPartitions в секционаторе source возвращается false.

–или–

Метод в секционаторе source возвращается null.

–или–

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

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

Комментарии

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

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

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

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

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

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

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

TSource

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

Параметры

source
Partitioner<TSource>

Секционатор, содержащий исходный источник данных.

body
Action<TSource>

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

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

Структура, содержащая сведения о том, какая часть цикла завершена.

Исключения

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

–или–

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

Свойство SupportsDynamicPartitions в секционаторе source возвращается false.

–или–

Исключение, которое возникает при возврате 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>

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

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

Структура, содержащая сведения о том, какая часть цикла завершена.

Исключения

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

–или–

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

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

Комментарии

Делегат 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.

Параметры

source
OrderablePartitioner<TSource>

Упорядоченный секционатор, содержащий исходный источник данных.

body
Action<TSource,ParallelLoopState,Int64>

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

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

Структура, содержащая сведения о том, какая часть цикла завершена.

Исключения

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

–или–

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

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

–или–

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

–или–

Все методы в возвращаемом nullобъекте секционатора с упорядоченным исходным кодом.

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

Комментарии

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

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

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

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

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

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

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

TSource

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

Параметры

source
IEnumerable<TSource>

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

body
Action<TSource>

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

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

Структура, содержащая сведения о том, какая часть цикла завершена.

Исключения

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

–или–

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

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

Примеры

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

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

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

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

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

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

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

Комментарии

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

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

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

Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
Parallel.cs
Исходный код:
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>

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

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

Структура, содержащая сведения о том, какая часть цикла завершена.

Исключения

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

–или–

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

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

Комментарии

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

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