Compartir a través de


Parallel.ForEach Método

Definición

Ejecuta una operación foreach (For Each en Visual Basic) en la que las iteraciones se pueden ejecutar en paralelo.

Sobrecargas

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

Ejecuta una operación de foreach (For Each en Visual Basic) con datos locales de subprocesos en una IEnumerable en la que se pueden ejecutar iteraciones en paralelo, se pueden configurar opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Ejecuta una operación de foreach (For Each en Visual Basic) con datos locales de subproceso e índices de 64 bits en una IEnumerable en la que se pueden ejecutar iteraciones en paralelo, se pueden configurar opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Ejecuta una operación foreach (For Each en Visual Basic) con datos locales de subprocesos en un Partitioner en el que se pueden ejecutar iteraciones en paralelo, se pueden configurar opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Ejecuta una operación de foreach (For Each en Visual Basic) con índices de 64 bits y con datos locales de subprocesos en un OrderablePartitioner<TSource> en el que se pueden ejecutar iteraciones en paralelo, las opciones de bucle se pueden configurar y el estado del bucle se puede supervisar y manipular.

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

Ejecuta una operación foreach (For Each en Visual Basic) con datos locales de subprocesos en un IEnumerable en el que las iteraciones se pueden ejecutar en paralelo y el estado del bucle se puede supervisar y manipular.

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

Ejecuta una operación foreach (For Each en Visual Basic) con datos locales de subprocesos en un IEnumerable en el que las iteraciones se pueden ejecutar en paralelo y el estado del bucle se puede supervisar y manipular.

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

Ejecuta una operación foreach (For Each en Visual Basic) con datos locales de subprocesos en un Partitioner en el que las iteraciones se pueden ejecutar en paralelo y el estado del bucle se puede supervisar y manipular.

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

Ejecuta una operación foreach (For Each en Visual Basic) con datos locales de subprocesos en un OrderablePartitioner<TSource> en el que se pueden ejecutar iteraciones en paralelo, se pueden configurar opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Ejecuta una operación foreach (For Each en Visual Basic) en una operación de IEnumerable en la que se pueden ejecutar iteraciones en paralelo y se pueden configurar opciones de bucle.

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

Ejecuta una operación foreach (For Each en Visual Basic) en una operación IEnumerable en la que se pueden ejecutar iteraciones en paralelo, se pueden configurar las opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Ejecuta una operación foreach (For Each en Visual Basic) en una operación OrderablePartitioner<TSource> en la que se pueden ejecutar iteraciones en paralelo, se pueden configurar las opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Ejecuta una operación de foreach (For Each en Visual Basic) en una Partitioner en la que se pueden configurar iteraciones en paralelo y se pueden configurar opciones de bucle.

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

Ejecuta una operación de foreach (For Each en Visual Basic) con índices de 64 bits en una IEnumerable en la que se pueden ejecutar iteraciones en paralelo, se pueden configurar opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Ejecuta una operación foreach (For Each en Visual Basic) en una operación Partitioner en la que las iteraciones se pueden ejecutar en paralelo y el estado del bucle se puede supervisar y manipular.

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

Ejecuta una operación foreach (For Each en Visual Basic) en una operación de Partitioner en la que se pueden ejecutar iteraciones en paralelo.

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

Ejecuta una operación de foreach (For Each en Visual Basic) con índices de 64 bits en un IEnumerable en el que se pueden ejecutar iteraciones en paralelo y el estado del bucle se puede supervisar y manipular.

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

Ejecuta una operación foreach (For Each en Visual Basic) en una operación OrderablePartitioner<TSource> en la que las iteraciones se pueden ejecutar en paralelo y el estado del bucle se puede supervisar y manipular.

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

Ejecuta una operación foreach (For Each en Visual Basic) en una operación de IEnumerable en la que las iteraciones se pueden ejecutar en paralelo.

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

Ejecuta una operación foreach (For Each en Visual Basic) en una operación Partitioner en la que se pueden ejecutar iteraciones en paralelo, se pueden configurar las opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Ejecuta una operación foreach (For Each en Visual Basic) en una operación IEnumerable en la que las iteraciones se pueden ejecutar en paralelo y el estado del bucle se puede supervisar y manipular.

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación de foreach (For Each en Visual Basic) con datos locales de subprocesos en una IEnumerable en la que se pueden ejecutar iteraciones en paralelo, se pueden configurar opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los datos del origen.

TLocal

Tipo de los datos locales del subproceso.

Parámetros

source
IEnumerable<TSource>

Origen de datos enumerable.

parallelOptions
ParallelOptions

Objeto que configura el comportamiento de esta operación.

localInit
Func<TLocal>

Delegado de función que devuelve el estado inicial de los datos locales para cada tarea.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Delegado que se invoca una vez por iteración.

localFinally
Action<TLocal>

Delegado que realiza una acción final en el estado local de cada tarea.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El source argumento es null.

O bien

El parallelOptions argumento es null.

O bien

El body argumento es null.

O bien

El localInit argumento es null.

O bien

El localFinally argumento es null.

En CancellationToken el parallelOptions argumento se cancela.

Se CancellationTokenSource ha eliminado el CancellationToken objeto asociado a en .parallelOptions

Excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.

Comentarios

El body delegado se invoca una vez para cada elemento de la source enumerable. Se proporciona con los parámetros siguientes: el elemento actual, una ParallelLoopState instancia que se puede usar para interrumpir el bucle prematuramente y algún estado local que se puede compartir entre iteraciones que se ejecutan en el mismo subproceso.

El localInit delegado se invoca una vez para cada tarea que participa en la ejecución del bucle y devuelve el estado local inicial para cada una de esas tareas. Estos estados iniciales se pasan a las primeras body invocaciones de cada tarea. A continuación, cada invocación posterior del cuerpo devuelve un valor de estado posiblemente modificado que se pasa a la siguiente invocación del cuerpo. Por último, la última invocación de cuerpo en cada tarea devuelve un valor de estado que se pasa al localFinally delegado. El localFinally delegado se invoca una vez por subproceso para realizar una acción final en el estado local de cada tarea. Este delegado puede invocarse simultáneamente en varias tareas; por lo tanto, debe sincronizar el acceso a las variables compartidas.

El Parallel.ForEach método puede usar más tareas que los subprocesos durante la duración de su ejecución, ya que las tareas existentes se completan y se reemplazan por nuevas tareas. Esto proporciona al objeto subyacente TaskScheduler la posibilidad de agregar, cambiar o quitar subprocesos que proporcionan servicio al bucle.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación de foreach (For Each en Visual Basic) con datos locales de subproceso e índices de 64 bits en una IEnumerable en la que se pueden ejecutar iteraciones en paralelo, se pueden configurar opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los datos del origen.

TLocal

Tipo de los datos locales del subproceso.

Parámetros

source
IEnumerable<TSource>

Origen de datos enumerable.

parallelOptions
ParallelOptions

Objeto que configura el comportamiento de esta operación.

localInit
Func<TLocal>

Delegado de función que devuelve el estado inicial de los datos locales para cada tarea.

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

Delegado que se invoca una vez por iteración.

localFinally
Action<TLocal>

Delegado que realiza una acción final en el estado local de cada tarea.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El source argumento es null.

O bien

El parallelOptions argumento es null.

O bien

El body argumento es null.

O bien

El localInit argumento es null.

O bien

El localFinally argumento es null.

En CancellationToken el parallelOptions argumento se cancela.

Se CancellationTokenSource ha eliminado el CancellationToken objeto asociado a en .parallelOptions

Excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.

Comentarios

El body delegado se invoca una vez para cada elemento de la source enumerable. Se proporciona con los parámetros siguientes: el elemento actual, una ParallelLoopState instancia que se puede usar para interrumpir el bucle prematuramente, el índice del elemento actual (Int64) y algún estado local que se puede compartir entre iteraciones que se ejecutan en el mismo subproceso.

El localInit delegado se invoca una vez para cada tarea que participa en la ejecución del bucle y devuelve el estado local inicial para cada una de esas tareas. Estos estados iniciales se pasan a las primeras body invocaciones de cada tarea. A continuación, cada invocación posterior del cuerpo devuelve un valor de estado posiblemente modificado que se pasa a la siguiente invocación del cuerpo. Por último, la última invocación de cuerpo en cada tarea devuelve un valor de estado que se pasa al localFinally delegado. El localFinally delegado se invoca una vez por subproceso para realizar una acción final en el estado local de cada tarea. Este delegado puede invocarse simultáneamente en varias tareas; por lo tanto, debe sincronizar el acceso a las variables compartidas.

El Parallel.ForEach método puede usar más tareas que los subprocesos durante la duración de su ejecución, ya que las tareas existentes se completan y se reemplazan por nuevas tareas. Esto proporciona al objeto subyacente TaskScheduler la posibilidad de agregar, cambiar o quitar subprocesos que proporcionan servicio al bucle.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación foreach (For Each en Visual Basic) con datos locales de subprocesos en un Partitioner en el que se pueden ejecutar iteraciones en paralelo, se pueden configurar opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los elementos de source.

TLocal

Tipo de los datos locales del subproceso.

Parámetros

source
Partitioner<TSource>

Particionador que contiene el origen de datos original.

parallelOptions
ParallelOptions

Objeto que configura el comportamiento de esta operación.

localInit
Func<TLocal>

Delegado de función que devuelve el estado inicial de los datos locales para cada tarea.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Delegado que se invoca una vez por iteración.

localFinally
Action<TLocal>

Delegado que realiza una acción final en el estado local de cada tarea.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El source argumento es null.

O bien

El parallelOptions argumento es null.

O bien

El body argumento es null.

O bien

El localInit argumento es null.

O bien

El localFinally argumento es null.

La SupportsDynamicPartitions propiedad de devuelve sourcePartitionerfalse o el particionador devuelve null particiones.

Excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.

En CancellationToken el parallelOptions argumento se cancela.

Se CancellationTokenSource ha eliminado el CancellationToken objeto asociado a en .parallelOptions

Comentarios

Esta sobrecarga se proporciona para escenarios en los que desea invalidar el esquema de partición predeterminado. Por ejemplo, los cuerpos de bucle pequeños pueden beneficiarse de la creación de particiones del intervalo. El ForEach método espera que los particionadores personalizados admitan la creación de particiones dinámicas. Esta sobrecarga se proporciona para escenarios con cuerpos de bucle pequeños que podrían beneficiarse de la creación de particiones de intervalos estáticos. Los particionadores deben admitir particiones dinámicas. Para obtener más información, vea Particionadores personalizados para PLINQ y TPL yCómo: Implementar particiones dinámicas.

El localInit delegado se invoca una vez para cada tarea que participa en la ejecución del bucle y devuelve el estado local inicial para cada una de esas tareas. Estos estados iniciales se pasan a las primeras body invocaciones de cada tarea. A continuación, cada invocación posterior del cuerpo devuelve un valor de estado posiblemente modificado que se pasa a la siguiente invocación del cuerpo. Por último, la última invocación de cuerpo en cada tarea devuelve un valor de estado que se pasa al localFinally delegado. El localFinally delegado se invoca una vez por tarea para realizar una acción final en el estado local de cada tarea. Este delegado puede invocarse simultáneamente en varias tareas; por lo tanto, debe sincronizar el acceso a las variables compartidas.

El Parallel.ForEach método puede usar más tareas que los subprocesos durante la duración de su ejecución, ya que las tareas existentes se completan y se reemplazan por nuevas tareas. Esto proporciona al objeto subyacente TaskScheduler la posibilidad de agregar, cambiar o quitar subprocesos que proporcionan servicio al bucle.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación de foreach (For Each en Visual Basic) con índices de 64 bits y con datos locales de subprocesos en un OrderablePartitioner<TSource> en el que se pueden ejecutar iteraciones en paralelo, las opciones de bucle se pueden configurar y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los elementos de source.

TLocal

Tipo de los datos locales del subproceso.

Parámetros

source
OrderablePartitioner<TSource>

Particionador ordenable que contiene el origen de datos original.

parallelOptions
ParallelOptions

Objeto que configura el comportamiento de esta operación.

localInit
Func<TLocal>

Delegado de función que devuelve el estado inicial de los datos locales para cada tarea.

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

Delegado que se invoca una vez por iteración.

localFinally
Action<TLocal>

Delegado que realiza una acción final en el estado local de cada tarea.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El source argumento es null.

O bien

El parallelOptions argumento es null.

O bien

El body argumento es null.

O bien

El localInit argumento o localFinally es null.

La SupportsDynamicPartitions propiedad de devuelve sourcePartitionerfalse o el particionador devuelve null particiones.

Excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.

En CancellationToken el parallelOptions argumento se cancela.

Se CancellationTokenSource ha eliminado el CancellationToken objeto asociado a en .parallelOptions

Comentarios

Esta sobrecarga se proporciona para escenarios en los que desea invalidar el esquema de partición predeterminado. Por ejemplo, los cuerpos de bucle pequeños pueden beneficiarse de la creación de particiones del intervalo. El ForEach método espera que los particionadores personalizados admitan la creación de particiones dinámicas. Para obtener más información, vea Particionadores personalizados para PLINQ y TPL yCómo: Implementar particiones dinámicas.

El localInit delegado se invoca una vez para cada tarea que participa en la ejecución del bucle y devuelve el estado local inicial para cada una de esas tareas. Estos estados iniciales se pasan a las primeras body invocaciones de cada tarea. A continuación, cada invocación posterior del cuerpo devuelve un valor de estado posiblemente modificado que se pasa a la siguiente invocación del cuerpo. Por último, la última invocación de cuerpo en cada subproceso devuelve un valor de estado que se pasa al localFinally delegado. El localFinally delegado se invoca una vez por tarea para realizar una acción final en el estado local de cada tarea. Este delegado puede invocarse simultáneamente en varias tareas; por lo tanto, debe sincronizar el acceso a las variables compartidas.

El Parallel.ForEach método puede usar más tareas que los subprocesos durante la duración de su ejecución, ya que las tareas existentes se completan y se reemplazan por nuevas tareas. Esto proporciona al objeto subyacente TaskScheduler la posibilidad de agregar, cambiar o quitar subprocesos que proporcionan servicio al bucle.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación foreach (For Each en Visual Basic) con datos locales de subprocesos en un IEnumerable en el que las iteraciones se pueden ejecutar en paralelo y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los datos del origen.

TLocal

Tipo de los datos locales del subproceso.

Parámetros

source
IEnumerable<TSource>

Origen de datos enumerable.

localInit
Func<TLocal>

Delegado de función que devuelve el estado inicial de los datos locales para cada tarea.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Delegado que se invoca una vez por iteración.

localFinally
Action<TLocal>

Delegado que realiza una acción final en el estado local de cada tarea.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El source argumento es null.

O bien

El body argumento es null.

O bien

El localInit argumento es null.

O bien

El localFinally argumento es null.

Excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.

Ejemplos

En el ejemplo siguiente se muestra cómo usar un ForEach método con estado local:

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

Comentarios

El body delegado se invoca una vez para cada elemento de la source enumerable. Se proporciona con los parámetros siguientes: el elemento actual, una ParallelLoopState instancia que se puede usar para interrumpir el bucle prematuramente y algún estado local que se puede compartir entre iteraciones que se ejecutan en el mismo subproceso.

El localInit delegado se invoca una vez para cada tarea que participa en la ejecución del bucle y devuelve el estado local inicial para cada una de esas tareas. Estos estados iniciales se pasan a las primeras body invocaciones de cada tarea. A continuación, cada invocación posterior del cuerpo devuelve un valor de estado posiblemente modificado que se pasa a la siguiente invocación del cuerpo. Por último, la última invocación de cuerpo en cada tarea devuelve un valor de estado que se pasa al localFinally delegado. El localFinally delegado se invoca una vez por subproceso para realizar una acción final en el estado local de cada tarea. Este delegado puede invocarse simultáneamente en varias tareas; por lo tanto, debe sincronizar el acceso a las variables compartidas.

El Parallel.ForEach método puede usar más tareas que los subprocesos durante la duración de su ejecución, ya que las tareas existentes se completan y se reemplazan por nuevas tareas. Esto proporciona al objeto subyacente TaskScheduler la posibilidad de agregar, cambiar o quitar subprocesos que proporcionan servicio al bucle.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación foreach (For Each en Visual Basic) con datos locales de subprocesos en un IEnumerable en el que las iteraciones se pueden ejecutar en paralelo y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los datos del origen.

TLocal

Tipo de los datos locales del subproceso.

Parámetros

source
IEnumerable<TSource>

Origen de datos enumerable.

localInit
Func<TLocal>

Delegado de función que devuelve el estado inicial de los datos locales para cada tarea.

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

Delegado que se invoca una vez por iteración.

localFinally
Action<TLocal>

Delegado que realiza una acción final en el estado local de cada tarea.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El source argumento es null.

O bien

El body argumento es null.

O bien

El localInit argumento es null.

O bien

El localFinally argumento es null.

Excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.

Comentarios

El body delegado se invoca una vez para cada elemento de la source enumerable. Se proporciona con los parámetros siguientes: el elemento actual, una ParallelLoopState instancia que se puede usar para interrumpir el bucle prematuramente, el índice del elemento actual (Int64) y algún estado local que se puede compartir entre iteraciones que se ejecutan en el mismo subproceso.

El localInit delegado se invoca una vez para cada tarea que participa en la ejecución del bucle y devuelve el estado local inicial para cada una de esas tareas. Estos estados iniciales se pasan a las primeras body invocaciones de cada tarea. A continuación, cada invocación posterior del cuerpo devuelve un valor de estado posiblemente modificado que se pasa a la siguiente invocación del cuerpo. Por último, la última invocación de cuerpo en cada tarea devuelve un valor de estado que se pasa al localFinally delegado. El localFinally delegado se invoca una vez por tarea para realizar una acción final en el estado local de cada tarea. Este delegado puede invocarse simultáneamente en varias tareas; por lo tanto, debe sincronizar el acceso a las variables compartidas.

El Parallel.ForEach método puede usar más tareas que los subprocesos durante la duración de su ejecución, ya que las tareas existentes se completan y se reemplazan por nuevas tareas. Esto proporciona al objeto subyacente TaskScheduler la posibilidad de agregar, cambiar o quitar subprocesos que proporcionan servicio al bucle.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación foreach (For Each en Visual Basic) con datos locales de subprocesos en un Partitioner en el que las iteraciones se pueden ejecutar en paralelo y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los elementos de source.

TLocal

Tipo de los datos locales del subproceso.

Parámetros

source
Partitioner<TSource>

Particionador que contiene el origen de datos original.

localInit
Func<TLocal>

Delegado de función que devuelve el estado inicial de los datos locales para cada tarea.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Delegado que se invoca una vez por iteración.

localFinally
Action<TLocal>

Delegado que realiza una acción final en el estado local de cada tarea.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El source argumento es null.

O bien

El body argumento es null.

O bien

El localInit argumento es null.

O bien

El localFinally argumento es null.

La SupportsDynamicPartitions propiedad de devuelve sourcePartitionerfalse o el particionador devuelve null particiones.

Excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.

Comentarios

Esta sobrecarga se proporciona para escenarios en los que desea invalidar el esquema de partición predeterminado. Por ejemplo, los cuerpos de bucle pequeños pueden beneficiarse de la creación de particiones del intervalo. El ForEach método espera que los particionadores personalizados admitan la creación de particiones dinámicas. Para obtener más información, vea Particionadores personalizados para PLINQ y TPL yCómo: Implementar particiones dinámicas.

El localInit delegado se invoca una vez para cada subproceso que participa en la ejecución del bucle y devuelve el estado local inicial para cada una de esas tareas. Estos estados iniciales se pasan a las primeras body invocaciones de cada tarea. A continuación, cada invocación posterior del cuerpo devuelve un valor de estado posiblemente modificado que se pasa a la siguiente invocación del cuerpo. Por último, la última invocación de cuerpo en cada tarea devuelve un valor de estado que se pasa al localFinally delegado. El localFinally delegado se invoca una vez por tarea para realizar una acción final en el estado local de cada tarea. Este delegado puede invocarse simultáneamente en varias tareas; por lo tanto, debe sincronizar el acceso a las variables compartidas.

El Parallel.ForEach método puede usar más tareas que los subprocesos durante la duración de su ejecución, ya que las tareas existentes se completan y se reemplazan por nuevas tareas. Esto proporciona al objeto subyacente TaskScheduler la posibilidad de agregar, cambiar o quitar subprocesos que proporcionan servicio al bucle.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación foreach (For Each en Visual Basic) con datos locales de subprocesos en un OrderablePartitioner<TSource> en el que se pueden ejecutar iteraciones en paralelo, se pueden configurar opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los elementos de source.

TLocal

Tipo de los datos locales del subproceso.

Parámetros

source
OrderablePartitioner<TSource>

Particionador ordenable que contiene el origen de datos original.

localInit
Func<TLocal>

Delegado de función que devuelve el estado inicial de los datos locales para cada tarea.

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

Delegado que se invoca una vez por iteración.

localFinally
Action<TLocal>

Delegado que realiza una acción final en el estado local de cada tarea.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El source argumento es null.

O bien

El body argumento es null.

O bien

El localInit argumento es null.

O bien

El localFinally argumento es null.

La SupportsDynamicPartitions propiedad de devuelve sourcePartitionerfalse o el particionador devuelve null particiones.

Excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.

Comentarios

Esta sobrecarga se proporciona para escenarios en los que desea invalidar el esquema de partición predeterminado. Por ejemplo, los cuerpos de bucle pequeños pueden beneficiarse de la creación de particiones del intervalo. El ForEach método espera que los particionadores personalizados admitan la creación de particiones dinámicas. Para obtener más información, vea Particionadores personalizados para PLINQ y TPL yCómo: Implementar particiones dinámicas.

El localInit delegado se invoca una vez para cada tarea que participa en la ejecución del bucle y devuelve el estado local inicial para cada una de esas tareas. Estos estados iniciales se pasan a las primeras body invocaciones de cada tarea. A continuación, cada invocación posterior del cuerpo devuelve un valor de estado posiblemente modificado que se pasa a la siguiente invocación del cuerpo. Por último, la última invocación de cuerpo en cada tarea devuelve un valor de estado que se pasa al localFinally delegado. El localFinally delegado se invoca una vez por tarea para realizar una acción final en el estado local de cada tarea. Este delegado puede invocarse simultáneamente en varias tareas; por lo tanto, debe sincronizar el acceso a las variables compartidas.

El Parallel.ForEach método puede usar más tareas que los subprocesos durante la duración de su ejecución, ya que las tareas existentes se completan y se reemplazan por nuevas tareas. Esto proporciona al objeto subyacente TaskScheduler la posibilidad de agregar, cambiar o quitar subprocesos que proporcionan servicio al bucle.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación foreach (For Each en Visual Basic) en una operación de IEnumerable en la que se pueden ejecutar iteraciones en paralelo y se pueden configurar opciones de bucle.

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

Parámetros de tipo

TSource

Tipo de los datos del origen.

Parámetros

source
IEnumerable<TSource>

Origen de datos enumerable.

parallelOptions
ParallelOptions

Objeto que configura el comportamiento de esta operación.

body
Action<TSource>

Delegado que se invoca una vez por iteración.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El CancellationToken elemento en el parallelOptions argumento se cancela

El source argumento es null.

O bien

El parallelOptions argumento es null.

O bien

El body argumento es null.

Excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.

Se CancellationTokenSource ha eliminado el CancellationToken objeto asociado a en .parallelOptions

Comentarios

El body delegado se invoca una vez para cada elemento de la source enumerable. Se proporciona con el elemento actual como parámetro.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación foreach (For Each en Visual Basic) en una operación IEnumerable en la que se pueden ejecutar iteraciones en paralelo, se pueden configurar las opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los datos del origen.

Parámetros

source
IEnumerable<TSource>

Origen de datos enumerable.

parallelOptions
ParallelOptions

Objeto que configura el comportamiento de esta operación.

body
Action<TSource,ParallelLoopState>

Delegado que se invoca una vez por iteración.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El CancellationToken elemento en el parallelOptions argumento se cancela

El source argumento es null.

O bien

El parallelOptions argumento es null.

O bien

El body argumento es null.

Excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.

Se CancellationTokenSource ha eliminado el CancellationToken objeto asociado a en .parallelOptions

Comentarios

El body delegado se invoca una vez para cada elemento de la source enumerable. Se proporciona con los parámetros siguientes: el elemento actual y una ParallelLoopState instancia que se puede usar para interrumpir el bucle prematuramente.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación foreach (For Each en Visual Basic) en una operación OrderablePartitioner<TSource> en la que se pueden ejecutar iteraciones en paralelo, se pueden configurar las opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los elementos de source.

Parámetros

source
OrderablePartitioner<TSource>

Particionador ordenable que contiene el origen de datos original.

parallelOptions
ParallelOptions

Objeto que configura el comportamiento de esta operación.

body
Action<TSource,ParallelLoopState,Int64>

Delegado que se invoca una vez por iteración.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El CancellationToken elemento en el parallelOptions argumento se cancela

El source argumento es null.

O bien

El parallelOptions argumento es null.

O bien

El body argumento es null.

Se CancellationTokenSource ha eliminado el CancellationToken objeto asociado a en .parallelOptions

La SupportsDynamicPartitions propiedad del source particionador ordenable devuelve false.

O bien

La KeysNormalized propiedad del source particionador ordenable devuelve false.

O bien

Excepción que se produce cuando los métodos del source particionador ordenable devuelven null.

Excepción que se produce para contener una excepción producida desde uno de los delegados especificados.

Comentarios

Esta sobrecarga se proporciona para escenarios en los que desea invalidar el esquema de partición predeterminado. Por ejemplo, los cuerpos de bucle pequeños pueden beneficiarse de la creación de particiones del intervalo. El Parallel.ForEach método espera que los particionadores personalizados admitan la creación de particiones dinámicas. Para obtener más información, vea Particionadores personalizados para PLINQ y TPL yCómo: Implementar particiones dinámicas.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación de foreach (For Each en Visual Basic) en una Partitioner en la que se pueden configurar iteraciones en paralelo y se pueden configurar opciones de bucle.

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

Parámetros de tipo

TSource

Tipo de los elementos de source.

Parámetros

source
Partitioner<TSource>

Particionador que contiene el origen de datos original.

parallelOptions
ParallelOptions

Objeto que configura el comportamiento de esta operación.

body
Action<TSource>

Delegado que se invoca una vez por iteración.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

En CancellationToken el parallelOptions argumento se cancela.

Se CancellationTokenSource ha eliminado el CancellationToken objeto asociado a en .parallelOptions

El source argumento es null.

O bien

El parallelOptions argumento es null.

O bien

El body argumento es null.

La SupportsDynamicPartitions propiedad del source particionador devuelve false.

O bien

Excepción que se produce cuando los métodos del source particionador devuelven null.

Excepción que se produce para contener una excepción producida desde uno de los delegados especificados.

Comentarios

Esta sobrecarga se proporciona para escenarios en los que desea invalidar el esquema de partición predeterminado. Por ejemplo, los cuerpos de bucle pequeños pueden beneficiarse de la creación de particiones del intervalo. El Parallel.ForEach método espera que los particionadores personalizados admitan la creación de particiones dinámicas. Para obtener más información, vea Particionadores personalizados para PLINQ y TPL yCómo: Implementar particiones dinámicas.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación de foreach (For Each en Visual Basic) con índices de 64 bits en una IEnumerable en la que se pueden ejecutar iteraciones en paralelo, se pueden configurar opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los datos del origen.

Parámetros

source
IEnumerable<TSource>

Origen de datos enumerable.

parallelOptions
ParallelOptions

Objeto que configura el comportamiento de esta operación.

body
Action<TSource,ParallelLoopState,Int64>

Delegado que se invoca una vez por iteración.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El CancellationToken elemento en el parallelOptions argumento se cancela

El source argumento es null.

O bien

El parallelOptions argumento es null.

O bien

El body argumento es null.

Excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.

Se CancellationTokenSource ha eliminado el CancellationToken objeto asociado a en .parallelOptions

Comentarios

El body delegado se invoca una vez para cada elemento de la source enumerable. Se proporciona con los parámetros siguientes: el elemento actual, una ParallelLoopState instancia que se puede usar para interrumpir el bucle prematuramente y el índice del elemento actual (Int64).

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación foreach (For Each en Visual Basic) en una operación Partitioner en la que las iteraciones se pueden ejecutar en paralelo y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los elementos de source.

Parámetros

source
Partitioner<TSource>

Particionador que contiene el origen de datos original.

body
Action<TSource,ParallelLoopState>

Delegado que se invoca una vez por iteración.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El source argumento es null.

O bien

El body argumento es null.

La SupportsDynamicPartitions propiedad del source particionador devuelve false.

O bien

Un método del source particionador devuelve null.

O bien

El GetPartitions(Int32) método del source particionador no devuelve el número correcto de particiones.

Excepción que se produce para contener una excepción producida desde uno de los delegados especificados.

Comentarios

Esta sobrecarga se proporciona para escenarios en los que desea invalidar el esquema de partición predeterminado. Por ejemplo, los cuerpos de bucle pequeños pueden beneficiarse de la creación de particiones del intervalo. El Parallel.ForEach método espera que los particionadores personalizados admitan la creación de particiones dinámicas. Para obtener más información, vea Particionadores personalizados para PLINQ y TPL yCómo: Implementar particiones dinámicas.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación foreach (For Each en Visual Basic) en una operación de Partitioner en la que se pueden ejecutar iteraciones en paralelo.

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

Parámetros de tipo

TSource

Tipo de los elementos de source.

Parámetros

source
Partitioner<TSource>

Particionador que contiene el origen de datos original.

body
Action<TSource>

Delegado que se invoca una vez por iteración.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El source argumento es null.

O bien

El body argumento es null.

La SupportsDynamicPartitions propiedad del source particionador devuelve false.

O bien

Excepción que se produce cuando los métodos del source particionador devuelven null.

O bien

El GetPartitions(Int32) método del source particionador no devuelve el número correcto de particiones.

Excepción que se produce para contener una excepción producida desde uno de los delegados especificados.

Ejemplos

En el ejemplo siguiente se muestra cómo implementar un particionador de intervalos para su uso con 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

Comentarios

Esta sobrecarga se proporciona para escenarios en los que desea invalidar el esquema de partición predeterminado. Por ejemplo, los cuerpos de bucle pequeños pueden beneficiarse de la creación de particiones del intervalo. El Parallel.ForEach método espera que los particionadores personalizados admitan la creación de particiones dinámicas. Para obtener más información, vea Particionadores personalizados para PLINQ y TPL yCómo: Implementar particiones dinámicas.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación de foreach (For Each en Visual Basic) con índices de 64 bits en un IEnumerable en el que se pueden ejecutar iteraciones en paralelo y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los datos del origen.

Parámetros

source
IEnumerable<TSource>

Origen de datos enumerable.

body
Action<TSource,ParallelLoopState,Int64>

Delegado que se invoca una vez por iteración.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El source argumento es null.

O bien

El body argumento es null.

Excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.

Comentarios

El body delegado se invoca una vez para cada elemento de la source enumerable. Se proporciona con los parámetros siguientes: el elemento actual, una ParallelLoopState instancia que se puede usar para interrumpir el bucle prematuramente y el índice del elemento actual (Int64).

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación foreach (For Each en Visual Basic) en una operación OrderablePartitioner<TSource> en la que las iteraciones se pueden ejecutar en paralelo y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los elementos de source.

Parámetros

source
OrderablePartitioner<TSource>

Particionador ordenable que contiene el origen de datos original.

body
Action<TSource,ParallelLoopState,Int64>

Delegado que se invoca una vez por iteración.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El source argumento es null.

O bien

El body argumento es null.

La SupportsDynamicPartitions propiedad del source particionador ordenable devuelve false.

O bien

La KeysNormalized propiedad del particionador ordenable de origen devuelve false.

O bien

Los métodos del particionador ordenable de origen devuelven null.

Excepción producida desde uno de los delegados especificados.

Comentarios

Esta sobrecarga se proporciona para escenarios en los que desea invalidar el esquema de partición predeterminado. Por ejemplo, los cuerpos de bucle pequeños pueden beneficiarse de la creación de particiones del intervalo. El Parallel.ForEach método espera que los particionadores personalizados admitan la creación de particiones dinámicas. Para obtener más información, vea Particionadores personalizados para PLINQ y TPL yCómo: Implementar particiones dinámicas.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación foreach (For Each en Visual Basic) en una operación de IEnumerable en la que las iteraciones se pueden ejecutar en paralelo.

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

Parámetros de tipo

TSource

Tipo de los datos del origen.

Parámetros

source
IEnumerable<TSource>

Origen de datos enumerable.

body
Action<TSource>

Delegado que se invoca una vez por iteración.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El source argumento es null.

O bien

El body argumento es null.

Excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.

Ejemplos

En el ejemplo siguiente se usa el ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) método para contar el número de vocales y caracteres que no son de espacio en blanco en un archivo de texto. En este caso, se omite el ParallelLoopResult valor devuelto por el método . Tenga en cuenta que, dado que las operaciones se pueden ejecutar en paralelo, debe asegurarse de que el incremento de las variables de contador es una operación atómica y que varios subprocesos no intentan acceder a las variables de contador simultáneamente. Para ello, en el ejemplo se usa la instrucción (en C#) y la instrucción />

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

Comentarios

El body delegado se invoca una vez para cada elemento de la source enumerable. Se proporciona con el elemento actual como parámetro.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación foreach (For Each en Visual Basic) en una operación Partitioner en la que se pueden ejecutar iteraciones en paralelo, se pueden configurar las opciones de bucle y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los elementos de source.

Parámetros

source
Partitioner<TSource>

Particionador que contiene el origen de datos original.

parallelOptions
ParallelOptions

Objeto que configura el comportamiento de esta operación.

body
Action<TSource,ParallelLoopState>

Delegado que se invoca una vez por iteración.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

En CancellationToken el parallelOptions argumento se cancela.

Se CancellationTokenSource ha eliminado el CancellationToken objeto asociado a en .parallelOptions

El source argumento es null.

O bien

El parallelOptions argumento es null.

O bien

El body argumento es null.

La SupportsDynamicPartitions propiedad del source particionador devuelve false.

O bien

Excepción que se produce cuando los métodos del source particionador devuelven null.

Excepción que se produce para contener una excepción producida desde uno de los delegados especificados.

Comentarios

Esta sobrecarga se proporciona para escenarios en los que desea invalidar el esquema de partición predeterminado. Por ejemplo, los cuerpos de bucle pequeños pueden beneficiarse de la creación de particiones del intervalo. El Parallel.ForEach método espera que los particionadores personalizados admitan la creación de particiones dinámicas. Para obtener más información, vea Particionadores personalizados para PLINQ y TPL yCómo: Implementar particiones dinámicas.

Se aplica a

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Ejecuta una operación foreach (For Each en Visual Basic) en una operación IEnumerable en la que las iteraciones se pueden ejecutar en paralelo y el estado del bucle se puede supervisar y manipular.

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

Parámetros de tipo

TSource

Tipo de los datos del origen.

Parámetros

source
IEnumerable<TSource>

Origen de datos enumerable.

body
Action<TSource,ParallelLoopState>

Delegado que se invoca una vez por iteración.

Devoluciones

Estructura que contiene información sobre qué parte del bucle se completó.

Excepciones

El source argumento es null.

O bien

El body argumento es null.

Excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.

Comentarios

El body delegado se invoca una vez para cada elemento de la source enumerable. Se proporciona con los parámetros siguientes: el elemento actual y una ParallelLoopState instancia que se puede usar para interrumpir el bucle prematuramente.

Se aplica a