Parallel.ForEach Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Ejecuta una operación foreach
(For Each
en Visual Basic) en la que es posible ejecutar iteraciones en paralelo.
Sobrecargas
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Ejecuta una operación |
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Ejecuta una operación |
ForEach<TSource,TLocal>(Partitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Ejecuta una operación |
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Ejecuta una |
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Ejecuta una operación |
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Ejecuta una operación |
ForEach<TSource,TLocal>(Partitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Ejecuta una operación |
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Ejecuta una operación |
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource>) |
Ejecuta una operación |
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>) |
Ejecuta una operación |
ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>) |
Ejecuta una operación |
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource>) |
Ejecuta una operación |
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>) |
Ejecuta una operación |
ForEach<TSource>(Partitioner<TSource>, Action<TSource,ParallelLoopState>) |
Ejecuta una operación |
ForEach<TSource>(Partitioner<TSource>, Action<TSource>) |
Ejecuta una operación |
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState,Int64>) |
Ejecuta una operación |
ForEach<TSource>(OrderablePartitioner<TSource>, Action<TSource,ParallelLoopState,Int64>) |
Ejecuta una operación |
ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) |
Ejecuta una operación |
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>) |
Ejecuta una operación |
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState>) |
Ejecuta una operación |
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)
- Source:
- Parallel.cs
- Source:
- Parallel.cs
- Source:
- Parallel.cs
Ejecuta una operación foreach
(For Each
en Visual Basic) con datos locales del subproceso en IEnumerable donde se pueden ejecutar iteraciones en paralelo y 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 de subprocesos.
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 de cada tarea.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Delegado que se invoca una vez por cada 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 argumento source
es null
.
O bien
El argumento parallelOptions
es null
.
O bien
El argumento body
es null
.
O bien
El argumento localInit
es null
.
O bien
El argumento localFinally
es null
.
CancellationToken en el argumento parallelOptions
se cancela.
El objeto CancellationTokenSource asociado a CancellationToken en el parallelOptions
se ha desechado.
La excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.
Comentarios
El body
delegado se invoca una vez para cada elemento del source
enumerador. 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 de cuerpo subsiguiente 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 a su vez proporcionan el bucle.
Consulte también
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
Ejecuta una operación foreach
(For Each
en Visual Basic) con índices de 64 bits y datos locales del subproceso en IEnumerable donde se pueden ejecutar iteraciones en paralelo y 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 de subprocesos.
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 de cada tarea.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Delegado que se invoca una vez por cada 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 argumento source
es null
.
O bien
El argumento parallelOptions
es null
.
O bien
El argumento body
es null
.
O bien
El argumento localInit
es null
.
O bien
El argumento localFinally
es null
.
CancellationToken en el argumento parallelOptions
se cancela.
El objeto CancellationTokenSource asociado a CancellationToken en el parallelOptions
se ha desechado.
La excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.
Comentarios
El body
delegado se invoca una vez para cada elemento del source
enumerador. 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 pueda 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 de cuerpo subsiguiente 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 el bucle.
Consulte también
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
Ejecuta una operación foreach
(For Each
en Visual Basic) con datos locales del subproceso en Partitioner donde se pueden ejecutar iteraciones en paralelo y 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 de subprocesos.
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 de cada tarea.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Delegado que se invoca una vez por cada 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 argumento source
es null
.
O bien
El argumento parallelOptions
es null
.
O bien
El argumento body
es null
.
O bien
El argumento localInit
es null
.
O bien
El argumento localFinally
es null
.
La propiedad SupportsDynamicPartitions de source
Partitioner devuelve false
o el particionador devuelve particiones null
.
La excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.
CancellationToken en el argumento parallelOptions
se cancela.
El objeto CancellationTokenSource asociado a CancellationToken en el parallelOptions
se ha desechado.
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 y Có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 de cada una de esas tareas. Estos estados iniciales se pasan a las primeras body
invocaciones de cada tarea. A continuación, cada invocación de cuerpo posterior devuelve un valor de estado posiblemente modificado que se pasa a la siguiente invocación de 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 el bucle.
Consulte también
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
Ejecuta una foreach
operación (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, se pueden configurar las 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, 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 de subprocesos.
Parámetros
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 de cada tarea.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Delegado que se invoca una vez por cada 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 argumento source
es null
.
O bien
El argumento parallelOptions
es null
.
O bien
El argumento body
es null
.
o bien
El argumento localInit
o localFinally
es null
.
La propiedad SupportsDynamicPartitions de source
Partitioner devuelve false
o el particionador devuelve particiones null
.
La excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.
CancellationToken en el argumento parallelOptions
se cancela.
El objeto CancellationTokenSource asociado a CancellationToken en el parallelOptions
se ha desechado.
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 y Có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 de cada una de esas tareas. Estos estados iniciales se pasan a las primeras body
invocaciones de cada tarea. A continuación, cada invocación de cuerpo posterior devuelve un valor de estado posiblemente modificado que se pasa a la siguiente invocación de 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 el bucle.
Consulte también
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
Ejecuta una operación foreach
(For Each
en Visual Basic) con datos locales del subproceso en IEnumerable donde se pueden ejecutar iteraciones 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 de subprocesos.
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 de cada tarea.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Delegado que se invoca una vez por cada 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 argumento source
es null
.
O bien
El argumento body
es null
.
O bien
El argumento localInit
es null
.
O bien
El argumento localFinally
es null
.
La 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 del source
enumerador. 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 de cada una de esas tareas. Estos estados iniciales se pasan a las primeras body
invocaciones de cada tarea. A continuación, cada invocación de cuerpo posterior devuelve un valor de estado posiblemente modificado que se pasa a la siguiente invocación de 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 a su vez proporcionan el bucle.
Consulte también
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
Ejecuta una operación foreach
(For Each
en Visual Basic) con datos locales del subproceso en IEnumerable donde se pueden ejecutar iteraciones 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 de subprocesos.
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 de cada tarea.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Delegado que se invoca una vez por cada 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 argumento source
es null
.
O bien
El argumento body
es null
.
O bien
El argumento localInit
es null
.
O bien
El argumento localFinally
es null
.
La excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.
Comentarios
El body
delegado se invoca una vez para cada elemento del source
enumerador. 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 pueda 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 de cuerpo subsiguiente 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 a su vez proporcionan el bucle.
Consulte también
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
Ejecuta una operación foreach
(For Each
en Visual Basic) con datos locales del subproceso en Partitioner donde se pueden ejecutar iteraciones 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 de subprocesos.
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 de cada tarea.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Delegado que se invoca una vez por cada 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 argumento source
es null
.
O bien
El argumento body
es null
.
O bien
El argumento localInit
es null
.
O bien
El argumento localFinally
es null
.
La propiedad SupportsDynamicPartitions de source
Partitioner devuelve false
o el particionador devuelve particiones null
.
La 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 y Có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 de cuerpo subsiguiente 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 a su vez proporcionan el bucle.
Consulte también
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
Ejecuta una operación foreach
(For Each
en Visual Basic) con datos locales del subproceso en OrderablePartitioner<TSource> donde se pueden ejecutar iteraciones en paralelo y 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 de subprocesos.
Parámetros
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 de cada tarea.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Delegado que se invoca una vez por cada 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 argumento source
es null
.
O bien
El argumento body
es null
.
O bien
El argumento localInit
es null
.
O bien
El argumento localFinally
es null
.
La propiedad SupportsDynamicPartitions de source
Partitioner devuelve false
o el particionador devuelve particiones null
.
La 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 y Có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 de cuerpo subsiguiente 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 a su vez proporcionan el bucle.
Consulte también
Se aplica a
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource>)
- Source:
- Parallel.cs
- Source:
- Parallel.cs
- Source:
- Parallel.cs
Ejecuta una operación foreach
(For Each
en Visual Basic) en IEnumerable donde se pueden ejecutar iteraciones en paralelo y configurar las 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 cada iteración.
Devoluciones
Estructura que contiene información sobre qué parte del bucle se completó.
Excepciones
CancellationToken en el argumento parallelOptions
se cancela
El argumento source
es null
.
O bien
El argumento parallelOptions
es null
.
O bien
El argumento body
es null
.
La excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.
El objeto CancellationTokenSource asociado a CancellationToken en el parallelOptions
se ha desechado.
Comentarios
El body
delegado se invoca una vez para cada elemento del source
enumerador. Se proporciona con el elemento actual como parámetro.
Consulte también
Se aplica a
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)
- Source:
- Parallel.cs
- Source:
- Parallel.cs
- Source:
- Parallel.cs
Ejecuta una operación foreach
(For Each
en Visual Basic) en IEnumerable donde se pueden ejecutar iteraciones en paralelo y 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 ^> ^ 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 cada iteración.
Devoluciones
Estructura que contiene información sobre qué parte del bucle se completó.
Excepciones
CancellationToken en el argumento parallelOptions
se cancela
El argumento source
es null
.
O bien
El argumento parallelOptions
es null
.
O bien
El argumento body
es null
.
La excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.
El objeto CancellationTokenSource asociado a CancellationToken en el parallelOptions
se ha desechado.
Comentarios
El body
delegado se invoca una vez para cada elemento del source
enumerador. Se proporciona con los parámetros siguientes: el elemento actual y una ParallelLoopState instancia que se puede usar para interrumpir el bucle prematuramente.
Consulte también
Se aplica a
ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)
- Source:
- Parallel.cs
- Source:
- Parallel.cs
- Source:
- Parallel.cs
Ejecuta una operación foreach
(For Each
en Visual Basic) en OrderablePartitioner<TSource> donde se pueden ejecutar iteraciones en paralelo y 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::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
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 cada iteración.
Devoluciones
Estructura que contiene información sobre qué parte del bucle se completó.
Excepciones
CancellationToken en el argumento parallelOptions
se cancela
El argumento source
es null
.
O bien
El argumento parallelOptions
es null
.
O bien
El argumento body
es null
.
El objeto CancellationTokenSource asociado a CancellationToken en el parallelOptions
se ha desechado.
La propiedad SupportsDynamicPartitions del particionador ordenable source
devuelve false
.
o bien
La propiedad KeysNormalized del particionador ordenable source
devuelve false
.
o bien
La excepción que se produce cuando cualquier método del particionador ordenable source
devuelve null
.
Excepción que se produce para contener una excepción generada 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 y Cómo: Implementar particiones dinámicas.
Consulte también
Se aplica a
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource>)
- Source:
- Parallel.cs
- Source:
- Parallel.cs
- Source:
- Parallel.cs
Ejecuta una operación foreach
(For Each
en Visual Basic) en Partitioner donde se pueden ejecutar iteraciones en paralelo y configurar las 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 cada iteración.
Devoluciones
Estructura que contiene información sobre qué parte del bucle se completó.
Excepciones
CancellationToken en el argumento parallelOptions
se cancela.
El objeto CancellationTokenSource asociado a CancellationToken en el parallelOptions
se ha desechado.
El argumento source
es null
.
O bien
El argumento parallelOptions
es null
.
O bien
El argumento body
es null
.
La propiedad SupportsDynamicPartitions del particionador source
devuelve false
.
o bien
La excepción que se produce cuando cualquier método del particionador source
devuelve null
.
Excepción que se produce para contener una excepción generada 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 y Cómo: Implementar particiones dinámicas.
Consulte también
Se aplica a
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)
- Source:
- Parallel.cs
- Source:
- Parallel.cs
- Source:
- Parallel.cs
Ejecuta una operación foreach
(For Each
in Visual Basic) con índices de 64 bits en IEnumerable donde se pueden ejecutar iteraciones en paralelo y 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 cada iteración.
Devoluciones
Estructura que contiene información sobre qué parte del bucle se completó.
Excepciones
CancellationToken en el argumento parallelOptions
se cancela
El argumento source
es null
.
O bien
El argumento parallelOptions
es null
.
O bien
El argumento body
es null
.
La excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.
El objeto CancellationTokenSource asociado a CancellationToken en el parallelOptions
se ha desechado.
Comentarios
El body
delegado se invoca una vez para cada elemento del source
enumerador. 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).
Consulte también
Se aplica a
ForEach<TSource>(Partitioner<TSource>, Action<TSource,ParallelLoopState>)
- Source:
- Parallel.cs
- Source:
- Parallel.cs
- Source:
- Parallel.cs
Ejecuta una operación foreach
(For Each
en Visual Basic) en Partitioner donde 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::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 cada iteración.
Devoluciones
Estructura que contiene información sobre qué parte del bucle se completó.
Excepciones
La propiedad SupportsDynamicPartitions del particionador source
devuelve false
.
o bien
Un método del particionador source
devuelve null
.
o bien
El método GetPartitions(Int32) del particionador source
no devuelve el número correcto de particiones.
Excepción que se produce para contener una excepción generada 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 y Cómo: Implementar particiones dinámicas.
Consulte también
Se aplica a
ForEach<TSource>(Partitioner<TSource>, Action<TSource>)
- Source:
- Parallel.cs
- Source:
- Parallel.cs
- Source:
- Parallel.cs
Ejecuta una operación foreach
(For Each
en Visual Basic) en Partitioner, en la que es posible 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 cada iteración.
Devoluciones
Estructura que contiene información sobre qué parte del bucle se completó.
Excepciones
La propiedad SupportsDynamicPartitions del particionador source
devuelve false
.
o bien
La excepción que se produce cuando cualquier método del particionador source
devuelve null
.
o bien
El método GetPartitions(Int32) del particionador source
no devuelve el número correcto de particiones.
Excepción que se produce para contener una excepción generada 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 y Cómo: Implementar particiones dinámicas.
Consulte también
Se aplica a
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState,Int64>)
- Source:
- Parallel.cs
- Source:
- Parallel.cs
- Source:
- Parallel.cs
Ejecuta una operación foreach
(For Each
en Visual Basic) con índices de 64 bits en IEnumerable donde 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 cada iteración.
Devoluciones
Estructura que contiene información sobre qué parte del bucle se completó.
Excepciones
La excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.
Comentarios
El body
delegado se invoca una vez para cada elemento del source
enumerador. 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).
Consulte también
Se aplica a
ForEach<TSource>(OrderablePartitioner<TSource>, Action<TSource,ParallelLoopState,Int64>)
- Source:
- Parallel.cs
- Source:
- Parallel.cs
- Source:
- Parallel.cs
Ejecuta una operación foreach
(For Each
en Visual Basic) en OrderablePartitioner<TSource> donde 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::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
Particionador ordenable que contiene el origen de datos original.
- body
- Action<TSource,ParallelLoopState,Int64>
Delegado que se invoca una vez por cada iteración.
Devoluciones
Estructura que contiene información sobre qué parte del bucle se completó.
Excepciones
La propiedad SupportsDynamicPartitions del particionador ordenable source
devuelve false
.
o bien
La propiedad KeysNormalized del particionador ordenable de origen devuelve false
.
o bien
Cualquier método en el particionador ordenable de origen devuelve null
.
Excepción que se produce en 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 y Cómo: Implementar particiones dinámicas.
Consulte también
Se aplica a
ForEach<TSource>(IEnumerable<TSource>, Action<TSource>)
- Source:
- Parallel.cs
- Source:
- Parallel.cs
- Source:
- Parallel.cs
Ejecuta una operación foreach
(For Each
en Visual Basic) en IEnumerable, en la que es posible ejecutar iteraciones 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 cada iteración.
Devoluciones
Estructura que contiene información sobre qué parte del bucle se completó.
Excepciones
La 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 incrementar 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 lock
instrucción (en C#) y la SyncLock
instrucción (en 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
Comentarios
El body
delegado se invoca una vez para cada elemento del source
enumerador. Se proporciona con el elemento actual como parámetro.
Consulte también
Se aplica a
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)
- Source:
- Parallel.cs
- Source:
- Parallel.cs
- Source:
- Parallel.cs
Ejecuta una operación foreach
(For Each
en Visual Basic) en Partitioner donde se pueden ejecutar iteraciones en paralelo y 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::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 cada iteración.
Devoluciones
Estructura que contiene información sobre qué parte del bucle se completó.
Excepciones
CancellationToken en el argumento parallelOptions
se cancela.
El objeto CancellationTokenSource asociado a CancellationToken en el parallelOptions
se ha desechado.
El argumento source
es null
.
O bien
El argumento parallelOptions
es null
.
O bien
El argumento body
es null
.
La propiedad SupportsDynamicPartitions del particionador source
devuelve false
.
o bien
La excepción que se produce cuando cualquier método del particionador source
devuelve null
.
Excepción que se produce para contener una excepción generada 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 y Cómo: Implementar particiones dinámicas.
Consulte también
Se aplica a
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState>)
- Source:
- Parallel.cs
- Source:
- Parallel.cs
- Source:
- Parallel.cs
Ejecuta una operación foreach
(For Each
en Visual Basic) en IEnumerable donde 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 ^> ^ 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 cada iteración.
Devoluciones
Estructura que contiene información sobre qué parte del bucle se completó.
Excepciones
La excepción que contiene todas las excepciones individuales producidas en todos los subprocesos.
Comentarios
El body
delegado se invoca una vez para cada elemento del source
enumerador. Se proporciona con los parámetros siguientes: el elemento actual y una ParallelLoopState instancia que se puede usar para interrumpir el bucle prematuramente.