Partilhar via


Parallel.ForEach Método

Definição

Executa uma operação foreach (For Each no Visual Basic) no qual as iterações podem ser executadas em paralelo.

Sobrecargas

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

Executa uma operação foreach (For Each no Visual Basic) com os dados locais do thread em um IEnumerable no qual as iterações podem ser executadas em paralelo, as opções de loop podem ser configuradas e o estado do loop pode ser monitorado e manipulado.

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

Executa uma operação foreach (For Each no Visual Basic) com os dados locais de thread e índices de 64 bits em um IEnumerable, no qual iterações podem ser executadas em paralelo, opções de loop podem ser configuradas e o estado de loop pode ser monitorado e manipulado.

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

Executa uma operação foreach (For Each no Visual Basic) com os dados locais do thread em um Partitioner, no qual iterações podem ser executadas em paralelo, opções de loop podem ser configuradas e o estado do loop pode ser monitorado e manipulado.

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

Executa uma foreach operação (For Each no Visual Basic) com índices de 64 bits e com dados locais de thread em um OrderablePartitioner<TSource> em que as iterações podem ser executadas em paralelo, as opções de loop podem ser configuradas e o estado do loop pode ser monitorado e manipulado.

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

Executa uma operação foreach (For Each no Visual Basic) com índices de dados de local de thread em um IEnumerable, no qual as iterações podem ser executadas em paralelo e o estado do loop pode ser monitorado e manipulado.

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

Executa uma operação foreach (For Each no Visual Basic) com os dados de local de thread em um IEnumerable no qual as iterações podem ser executadas em paralelo e o estado do loop pode ser monitorado e manipulado.

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

Executa uma operação foreach (For Each no Visual Basic) com os dados de local de thread em um Partitioner, no qual as iterações podem ser executadas em paralelo e o estado do loop pode ser monitorado e manipulado.

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

Executa uma operação foreach (For Each no Visual Basic) com os dados locais do thread em um OrderablePartitioner<TSource>, no qual iterações podem ser executadas em paralelo, opções de loop podem ser configuradas e o estado do loop pode ser monitorado e manipulado.

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

Executa uma operação foreach (For Each no Visual Basic) em um IEnumerable no qual as iterações podem ser executadas em paralelo e as opções de loop podem ser configuradas.

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

Executa uma operação foreach (For Each no Visual Basic) em um IEnumerable, no qual iterações podem ser executadas em paralelo, opções de loop podem ser configuradas e o estado de loop pode ser monitorado e manipulado.

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

Executa uma operação foreach (For Each no Visual Basic) em um OrderablePartitioner<TSource>, em que iterações podem ser executadas em paralelo, opções de loop podem ser configuradas e o estado do loop pode ser monitorado e manipulado.

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

Executa uma operação foreach (For Each no Visual Basic) em um Partitioner no qual as iterações podem ser executadas em paralelo e as opções de loop podem ser configuradas.

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

Executa uma operação foreach (For Each no Visual Basic) em índices de 64 bits em um IEnumerable, no qual iterações podem ser executadas em paralelo, opções de loop podem ser configuradas e o estado de loop pode ser monitorado e manipulado.

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

Executa uma operação foreach (For Each no Visual Basic) em um Partitioner, na qual as iterações podem ser executadas em paralelo e o estado do loop pode ser monitorado e manipulado.

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

Executa uma operação foreach (For Each no Visual Basic) em um Partitioner no qual as iterações podem ser executadas em paralelo.

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

Executa uma operação foreach (For Each no Visual Basic) com índices de 64 bits em uma IEnumerable na qual as iterações podem ser executadas em paralelo e o estado do loop pode ser monitorado e manipulado.

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

Executa uma operação foreach (For Each no Visual Basic) em um OrderablePartitioner<TSource>, no qual as iterações podem ser executadas em paralelo e o estado do loop pode ser monitorado e manipulado.

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

Executa uma operação foreach (For Each no Visual Basic) em um IEnumerable no qual as iterações podem ser executadas em paralelo.

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

Executa uma operação foreach (For Each no Visual Basic) em um Partitioner, em que iterações podem ser executadas em paralelo, opções de loop podem ser configuradas e o estado do loop pode ser monitorado e manipulado.

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

Executa uma operação foreach (For Each no Visual Basic) em uma IEnumerable na qual as iterações podem ser executadas em paralelo e o estado do loop pode ser monitorado e manipulado.

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) com os dados locais do thread em um IEnumerable no qual as iterações podem ser executadas em paralelo, as opções de loop podem ser configuradas e o estado do loop pode ser monitorado e manipulado.

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

O tipo de dados na origem.

TLocal

O tipo dos dados locais do thread.

Parâmetros

source
IEnumerable<TSource>

Uma fonte de dados enumerável.

parallelOptions
ParallelOptions

Um objeto que configura o comportamento dessa operação.

localInit
Func<TLocal>

O delegado da função que retorna o estado inicial dos dados locais para cada tarefa.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

O delegado invocado uma vez por iteração.

localFinally
Action<TLocal>

O delegado que executa uma ação final no estado local de cada tarefa.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O argumento source é null.

- ou -

O argumento parallelOptions é null.

- ou -

O argumento body é null.

- ou -

O argumento localInit é null.

- ou -

O argumento localFinally é null.

O CancellationToken no argumento parallelOptions é cancelado.

O CancellationTokenSource associado ao CancellationToken nas parallelOptions foi descartado.

A exceção que contém todas as exceções individuais lançadas em todos os threads.

Comentários

O body delegado é invocado uma vez para cada elemento no source enumerável. Ele é fornecido com os seguintes parâmetros: o elemento atual, uma ParallelLoopState instância que pode ser usada para sair do loop prematuramente e algum estado local que pode ser compartilhado entre iterações que são executadas no mesmo thread.

O localInit delegado é invocado uma vez para cada tarefa que participa da execução do loop e retorna o estado local inicial para cada uma dessas tarefas. Esses estados iniciais são passados para as primeiras body invocações em cada tarefa. Em seguida, cada invocação de corpo subsequente retorna um valor de estado possivelmente modificado que é passado para a próxima invocação do corpo. Por fim, a última invocação de corpo em cada tarefa retorna um valor de estado que é passado para o localFinally delegado. O localFinally delegado é invocado uma vez por thread para executar uma ação final no estado local de cada tarefa. Esse delegado pode ser invocado simultaneamente em várias tarefas; portanto, você deve sincronizar o acesso a quaisquer variáveis compartilhadas.

O Parallel.ForEach método pode usar mais tarefas do que threads ao longo do tempo de vida de sua execução, à medida que as tarefas existentes são concluídas e substituídas por novas tarefas. Isso dá ao objeto subjacente TaskScheduler a chance de adicionar, alterar ou remover threads que dão serviço ao loop.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) com os dados locais de thread e índices de 64 bits em um IEnumerable, no qual iterações podem ser executadas em paralelo, opções de loop podem ser configuradas e o estado de loop pode ser monitorado e manipulado.

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

O tipo de dados na origem.

TLocal

O tipo dos dados locais do thread.

Parâmetros

source
IEnumerable<TSource>

Uma fonte de dados enumerável.

parallelOptions
ParallelOptions

Um objeto que configura o comportamento dessa operação.

localInit
Func<TLocal>

O delegado da função que retorna o estado inicial dos dados locais para cada tarefa.

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

O delegado invocado uma vez por iteração.

localFinally
Action<TLocal>

O delegado que executa uma ação final no estado local de cada tarefa.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O argumento source é null.

- ou -

O argumento parallelOptions é null.

- ou -

O argumento body é null.

- ou -

O argumento localInit é null.

- ou -

O argumento localFinally é null.

O CancellationToken no argumento parallelOptions é cancelado.

O CancellationTokenSource associado ao CancellationToken nas parallelOptions foi descartado.

A exceção que contém todas as exceções individuais lançadas em todos os threads.

Comentários

O body delegado é invocado uma vez para cada elemento no source enumerável. Ele é fornecido com os seguintes parâmetros: o elemento atual, uma ParallelLoopState instância que pode ser usada para sair do loop prematuramente, o índice do elemento atual (Int64) e algum estado local que pode ser compartilhado entre iterações executadas no mesmo thread.

O localInit delegado é invocado uma vez para cada tarefa que participa da execução do loop e retorna o estado local inicial para cada uma dessas tarefas. Esses estados iniciais são passados para as primeiras body invocações em cada tarefa. Em seguida, cada invocação de corpo subsequente retorna um valor de estado possivelmente modificado que é passado para a próxima invocação do corpo. Por fim, a última invocação de corpo em cada tarefa retorna um valor de estado que é passado para o localFinally delegado. O localFinally delegado é invocado uma vez por thread para executar uma ação final no estado local de cada tarefa. Esse delegado pode ser invocado simultaneamente em várias tarefas; Portanto, você deve sincronizar o acesso a qualquer variável compartilhada.

O Parallel.ForEach método pode usar mais tarefas do que threads durante o tempo de vida de sua execução, à medida que as tarefas existentes são concluídas e substituídas por novas tarefas. Isso dá ao objeto subjacente TaskScheduler a chance de adicionar, alterar ou remover threads que dão serviço ao loop.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) com os dados locais do thread em um Partitioner, no qual iterações podem ser executadas em paralelo, opções de loop podem ser configuradas e o estado do loop pode ser monitorado e manipulado.

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

O tipo dos elementos em source.

TLocal

O tipo dos dados locais do thread.

Parâmetros

source
Partitioner<TSource>

O particionador que contém a fonte de dados original.

parallelOptions
ParallelOptions

Um objeto que configura o comportamento dessa operação.

localInit
Func<TLocal>

O delegado da função que retorna o estado inicial dos dados locais para cada tarefa.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

O delegado invocado uma vez por iteração.

localFinally
Action<TLocal>

O delegado que executa uma ação final no estado local de cada tarefa.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O argumento source é null.

- ou -

O argumento parallelOptions é null.

- ou -

O argumento body é null.

- ou -

O argumento localInit é null.

- ou -

O argumento localFinally é null.

A propriedade SupportsDynamicPartitions no sourcePartitioner retorna false ou o particionador retorna partições null.

A exceção que contém todas as exceções individuais lançadas em todos os threads.

O CancellationToken no argumento parallelOptions é cancelado.

O CancellationTokenSource associado ao CancellationToken nas parallelOptions foi descartado.

Comentários

Essa sobrecarga é fornecida para cenários em que você deseja substituir o esquema de particionamento padrão. Por exemplo, corpos de loop pequenos podem se beneficiar do particionamento do intervalo. O ForEach método espera que particionadores personalizados ofereçam suporte ao particionamento dinâmico. Essa sobrecarga é fornecida para cenários com corpos de loop pequenos que podem se beneficiar do particionamento de intervalo estático. Os particionadores devem dar suporte a partições dinâmicas. Para obter mais informações, consulte Particionadores personalizados para PLINQ e TPL e Como implementar partições dinâmicas.

O localInit delegado é invocado uma vez para cada tarefa que participa da execução do loop e retorna o estado local inicial para cada uma dessas tarefas. Esses estados iniciais são passados para as primeiras body invocações em cada tarefa. Em seguida, cada invocação de corpo subsequente retorna um valor de estado possivelmente modificado que é passado para a próxima invocação do corpo. Por fim, a última invocação de corpo em cada tarefa retorna um valor de estado que é passado para o localFinally delegado. O localFinally delegado é invocado uma vez por tarefa para executar uma ação final no estado local de cada tarefa. Esse delegado pode ser invocado simultaneamente em várias tarefas; Portanto, você deve sincronizar o acesso a qualquer variável compartilhada.

O Parallel.ForEach método pode usar mais tarefas do que threads durante o tempo de vida de sua execução, à medida que as tarefas existentes são concluídas e substituídas por novas tarefas. Isso dá ao objeto subjacente TaskScheduler a chance de adicionar, alterar ou remover threads que dão serviço ao loop.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma foreach operação (For Each no Visual Basic) com índices de 64 bits e com dados locais de thread em um OrderablePartitioner<TSource> no qual as iterações podem ser executadas em paralelo, as opções de loop podem ser configuradas e o estado do loop pode ser monitorado e manipulado.

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

O tipo dos elementos em source.

TLocal

O tipo dos dados locais do thread.

Parâmetros

source
OrderablePartitioner<TSource>

O particionador solicitável que contém a fonte de dados original.

parallelOptions
ParallelOptions

Um objeto que configura o comportamento dessa operação.

localInit
Func<TLocal>

O delegado da função que retorna o estado inicial dos dados locais para cada tarefa.

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

O delegado invocado uma vez por iteração.

localFinally
Action<TLocal>

O delegado que executa uma ação final no estado local de cada tarefa.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O argumento source é null.

- ou -

O argumento parallelOptions é null.

- ou -

O argumento body é null.

- ou -

O argumento localInit ou localFinally é null.

A propriedade SupportsDynamicPartitions no sourcePartitioner retorna false ou o particionador retorna partições null.

A exceção que contém todas as exceções individuais lançadas em todos os threads.

O CancellationToken no argumento parallelOptions é cancelado.

O CancellationTokenSource associado ao CancellationToken nas parallelOptions foi descartado.

Comentários

Essa sobrecarga é fornecida para cenários em que você deseja substituir o esquema de particionamento padrão. Por exemplo, corpos de loop pequenos podem se beneficiar do particionamento do intervalo. O ForEach método espera que particionadores personalizados ofereçam suporte ao particionamento dinâmico. Para obter mais informações, consulte Particionadores personalizados para PLINQ e TPL e Como implementar partições dinâmicas.

O localInit delegado é invocado uma vez para cada tarefa que participa da execução do loop e retorna o estado local inicial para cada uma dessas tarefas. Esses estados iniciais são passados para as primeiras body invocações em cada tarefa. Em seguida, cada invocação de corpo subsequente retorna um valor de estado possivelmente modificado que é passado para a próxima invocação do corpo. Por fim, a última invocação de corpo em cada thread retorna um valor de estado que é passado para o localFinally delegado. O localFinally delegado é invocado uma vez por tarefa para executar uma ação final no estado local de cada tarefa. Esse delegado pode ser invocado simultaneamente em várias tarefas; Portanto, você deve sincronizar o acesso a qualquer variável compartilhada.

O Parallel.ForEach método pode usar mais tarefas do que threads durante o tempo de vida de sua execução, à medida que as tarefas existentes são concluídas e substituídas por novas tarefas. Isso dá ao objeto subjacente TaskScheduler a chance de adicionar, alterar ou remover threads que dão serviço ao loop.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) com índices de dados de local de thread em um IEnumerable, no qual as iterações podem ser executadas em paralelo e o estado do loop pode ser monitorado e manipulado.

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

O tipo de dados na origem.

TLocal

O tipo dos dados locais do thread.

Parâmetros

source
IEnumerable<TSource>

Uma fonte de dados enumerável.

localInit
Func<TLocal>

O delegado da função que retorna o estado inicial dos dados locais para cada tarefa.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

O delegado invocado uma vez por iteração.

localFinally
Action<TLocal>

O delegado que executa uma ação final no estado local de cada tarefa.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O argumento source é null.

- ou -

O argumento body é null.

- ou -

O argumento localInit é null.

- ou -

O argumento localFinally é null.

A exceção que contém todas as exceções individuais lançadas em todos os threads.

Exemplos

O exemplo a seguir mostra como usar um ForEach método com o 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

Comentários

O body delegado é invocado uma vez para cada elemento no source enumerável. Ele é fornecido com os seguintes parâmetros: o elemento atual, uma ParallelLoopState instância que pode ser usada para sair do loop prematuramente e algum estado local que pode ser compartilhado entre iterações executadas no mesmo thread.

O localInit delegado é invocado uma vez para cada tarefa que participa da execução do loop e retorna o estado local inicial para cada uma dessas tarefas. Esses estados iniciais são passados para as primeiras body invocações em cada tarefa. Em seguida, cada invocação de corpo subsequente retorna um valor de estado possivelmente modificado que é passado para a próxima invocação do corpo. Por fim, a última invocação de corpo em cada tarefa retorna um valor de estado que é passado para o localFinally delegado. O localFinally delegado é invocado uma vez por thread para executar uma ação final no estado local de cada tarefa. Esse delegado pode ser invocado simultaneamente em várias tarefas; Portanto, você deve sincronizar o acesso a qualquer variável compartilhada.

O Parallel.ForEach método pode usar mais tarefas do que threads ao longo do tempo de vida de sua execução, à medida que as tarefas existentes são concluídas e substituídas por novas tarefas. Isso dá ao objeto subjacente TaskScheduler a chance de adicionar, alterar ou remover threads que dão serviço ao loop.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) com os dados de local de thread em um IEnumerable no qual as iterações podem ser executadas em paralelo e o estado do loop pode ser monitorado e manipulado.

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

O tipo de dados na origem.

TLocal

O tipo dos dados locais do thread.

Parâmetros

source
IEnumerable<TSource>

Uma fonte de dados enumerável.

localInit
Func<TLocal>

O delegado da função que retorna o estado inicial dos dados locais para cada tarefa.

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

O delegado invocado uma vez por iteração.

localFinally
Action<TLocal>

O delegado que executa uma ação final no estado local de cada tarefa.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O argumento source é null.

- ou -

O argumento body é null.

- ou -

O argumento localInit é null.

- ou -

O argumento localFinally é null.

A exceção que contém todas as exceções individuais lançadas em todos os threads.

Comentários

O body delegado é invocado uma vez para cada elemento no source enumerável. Ele é fornecido com os seguintes parâmetros: o elemento atual, uma ParallelLoopState instância que pode ser usada para sair do loop prematuramente, o índice do elemento atual (Int64) e algum estado local que pode ser compartilhado entre iterações executadas no mesmo thread.

O localInit delegado é invocado uma vez para cada tarefa que participa da execução do loop e retorna o estado local inicial para cada uma dessas tarefas. Esses estados iniciais são passados para as primeiras body invocações em cada tarefa. Em seguida, cada invocação de corpo subsequente retorna um valor de estado possivelmente modificado que é passado para a próxima invocação do corpo. Por fim, a última invocação de corpo em cada tarefa retorna um valor de estado que é passado para o localFinally delegado. O localFinally delegado é invocado uma vez por tarefa para executar uma ação final no estado local de cada tarefa. Esse delegado pode ser invocado simultaneamente em várias tarefas; portanto, você deve sincronizar o acesso a quaisquer variáveis compartilhadas.

O Parallel.ForEach método pode usar mais tarefas do que threads ao longo do tempo de vida de sua execução, à medida que as tarefas existentes são concluídas e substituídas por novas tarefas. Isso dá ao objeto subjacente TaskScheduler a chance de adicionar, alterar ou remover threads que dão serviço ao loop.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) com os dados de local de thread em um Partitioner, no qual as iterações podem ser executadas em paralelo e o estado do loop pode ser monitorado e manipulado.

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

O tipo dos elementos em source.

TLocal

O tipo dos dados locais do thread.

Parâmetros

source
Partitioner<TSource>

O particionador que contém a fonte de dados original.

localInit
Func<TLocal>

O delegado da função que retorna o estado inicial dos dados locais para cada tarefa.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

O delegado invocado uma vez por iteração.

localFinally
Action<TLocal>

O delegado que executa uma ação final no estado local de cada tarefa.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O argumento source é null.

- ou -

O argumento body é null.

- ou -

O argumento localInit é null.

- ou -

O argumento localFinally é null.

A propriedade SupportsDynamicPartitions no sourcePartitioner retorna false ou o particionador retorna partições null.

A exceção que contém todas as exceções individuais lançadas em todos os threads.

Comentários

Essa sobrecarga é fornecida para cenários em que você deseja substituir o esquema de particionamento padrão. Por exemplo, corpos de loop pequeno podem se beneficiar do particionamento do intervalo. O ForEach método espera que particionadores personalizados ofereçam suporte ao particionamento dinâmico. Para obter mais informações, consulte Particionadores personalizados para PLINQ e TPL e Como implementar partições dinâmicas.

O localInit delegado é invocado uma vez para cada thread que participa da execução do loop e retorna o estado local inicial para cada uma dessas tarefas. Esses estados iniciais são passados para as primeiras body invocações em cada tarefa. Em seguida, cada invocação de corpo subsequente retorna um valor de estado possivelmente modificado que é passado para a próxima invocação do corpo. Por fim, a última invocação de corpo em cada tarefa retorna um valor de estado que é passado para o localFinally delegado. O localFinally delegado é invocado uma vez por tarefa para executar uma ação final no estado local de cada tarefa. Esse delegado pode ser invocado simultaneamente em várias tarefas; portanto, você deve sincronizar o acesso a quaisquer variáveis compartilhadas.

O Parallel.ForEach método pode usar mais tarefas do que threads ao longo do tempo de vida de sua execução, à medida que as tarefas existentes são concluídas e substituídas por novas tarefas. Isso dá ao objeto subjacente TaskScheduler a chance de adicionar, alterar ou remover threads que dão serviço ao loop.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) com os dados locais do thread em um OrderablePartitioner<TSource>, no qual iterações podem ser executadas em paralelo, opções de loop podem ser configuradas e o estado do loop pode ser monitorado e manipulado.

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

O tipo dos elementos em source.

TLocal

O tipo dos dados locais do thread.

Parâmetros

source
OrderablePartitioner<TSource>

O particionador solicitável que contém a fonte de dados original.

localInit
Func<TLocal>

O delegado da função que retorna o estado inicial dos dados locais para cada tarefa.

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

O delegado invocado uma vez por iteração.

localFinally
Action<TLocal>

O delegado que executa uma ação final no estado local de cada tarefa.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O argumento source é null.

- ou -

O argumento body é null.

- ou -

O argumento localInit é null.

- ou -

O argumento localFinally é null.

A propriedade SupportsDynamicPartitions no sourcePartitioner retorna false ou o particionador retorna partições null.

A exceção que contém todas as exceções individuais lançadas em todos os threads.

Comentários

Essa sobrecarga é fornecida para cenários em que você deseja substituir o esquema de particionamento padrão. Por exemplo, corpos de loop pequeno podem se beneficiar do particionamento do intervalo. O ForEach método espera que particionadores personalizados ofereçam suporte ao particionamento dinâmico. Para obter mais informações, consulte Particionadores personalizados para PLINQ e TPL e Como implementar partições dinâmicas.

O localInit delegado é invocado uma vez para cada tarefa que participa da execução do loop e retorna o estado local inicial para cada uma dessas tarefas. Esses estados iniciais são passados para as primeiras body invocações em cada tarefa. Em seguida, cada invocação de corpo subsequente retorna um valor de estado possivelmente modificado que é passado para a próxima invocação do corpo. Por fim, a última invocação de corpo em cada tarefa retorna um valor de estado que é passado para o localFinally delegado. O localFinally delegado é invocado uma vez por tarefa para executar uma ação final no estado local de cada tarefa. Esse delegado pode ser invocado simultaneamente em várias tarefas; portanto, você deve sincronizar o acesso a quaisquer variáveis compartilhadas.

O Parallel.ForEach método pode usar mais tarefas do que threads ao longo do tempo de vida de sua execução, à medida que as tarefas existentes são concluídas e substituídas por novas tarefas. Isso dá ao objeto subjacente TaskScheduler a chance de adicionar, alterar ou remover threads que dão serviço ao loop.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) em um IEnumerable no qual as iterações podem ser executadas em paralelo e as opções de loop podem ser configuradas.

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

O tipo de dados na origem.

Parâmetros

source
IEnumerable<TSource>

Uma fonte de dados enumerável.

parallelOptions
ParallelOptions

Um objeto que configura o comportamento dessa operação.

body
Action<TSource>

O delegado invocado uma vez por iteração.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O CancellationToken no argumento parallelOptions foi cancelado

O argumento source é null.

- ou -

O argumento parallelOptions é null.

- ou -

O argumento body é null.

A exceção que contém todas as exceções individuais lançadas em todos os threads.

O CancellationTokenSource associado ao CancellationToken nas parallelOptions foi descartado.

Comentários

O body delegado é invocado uma vez para cada elemento no source enumerável. Ele é fornecido com o elemento atual como um parâmetro.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) em um IEnumerable, no qual iterações podem ser executadas em paralelo, opções de loop podem ser configuradas e o estado de loop pode ser monitorado e manipulado.

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

O tipo de dados na origem.

Parâmetros

source
IEnumerable<TSource>

Uma fonte de dados enumerável.

parallelOptions
ParallelOptions

Um objeto que configura o comportamento dessa operação.

body
Action<TSource,ParallelLoopState>

O delegado invocado uma vez por iteração.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O CancellationToken no argumento parallelOptions foi cancelado

O argumento source é null.

- ou -

O argumento parallelOptions é null.

- ou -

O argumento body é null.

A exceção que contém todas as exceções individuais lançadas em todos os threads.

O CancellationTokenSource associado ao CancellationToken nas parallelOptions foi descartado.

Comentários

O body delegado é invocado uma vez para cada elemento no source enumerável. Ele é fornecido com os seguintes parâmetros: o elemento atual e uma ParallelLoopState instância que pode ser usada para sair do loop prematuramente.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) em um OrderablePartitioner<TSource>, em que iterações podem ser executadas em paralelo, opções de loop podem ser configuradas e o estado do loop pode ser monitorado e manipulado.

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

O tipo dos elementos em source.

Parâmetros

source
OrderablePartitioner<TSource>

O particionador solicitável que contém a fonte de dados original.

parallelOptions
ParallelOptions

Um objeto que configura o comportamento dessa operação.

body
Action<TSource,ParallelLoopState,Int64>

O delegado invocado uma vez por iteração.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O CancellationToken no argumento parallelOptions foi cancelado

O argumento source é null.

- ou -

O argumento parallelOptions é null.

- ou -

O argumento body é null.

O CancellationTokenSource associado ao CancellationToken nas parallelOptions foi descartado.

A propriedade SupportsDynamicPartitions no particionador solicitável source retorna false.

- ou -

A propriedade KeysNormalized no particionador solicitável source retorna false.

- ou -

A exceção que é gerada quando qualquer método no particionador solicitável source retorna null.

A exceção que é gerada para conter uma exceção gerada de uma dos delegados especificados.

Comentários

Essa sobrecarga é fornecida para cenários em que você deseja substituir o esquema de particionamento padrão. Por exemplo, corpos de loop pequeno podem se beneficiar do particionamento do intervalo. O Parallel.ForEach método espera que particionadores personalizados ofereçam suporte ao particionamento dinâmico. Para obter mais informações, consulte Particionadores personalizados para PLINQ e TPL e Como implementar partições dinâmicas.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) em um Partitioner no qual as iterações podem ser executadas em paralelo e as opções de loop podem ser configuradas.

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

O tipo dos elementos em source.

Parâmetros

source
Partitioner<TSource>

O particionador que contém a fonte de dados original.

parallelOptions
ParallelOptions

Um objeto que configura o comportamento dessa operação.

body
Action<TSource>

O delegado invocado uma vez por iteração.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O CancellationToken no argumento parallelOptions é cancelado.

O CancellationTokenSource associado ao CancellationToken nas parallelOptions foi descartado.

O argumento source é null.

- ou -

O argumento parallelOptions é null.

- ou -

O argumento body é null.

A propriedade SupportsDynamicPartitions no particionador source retorna false.

- ou -

A exceção que é gerada quando qualquer método no particionador source retorna null.

A exceção que é gerada para conter uma exceção gerada de uma dos delegados especificados.

Comentários

Essa sobrecarga é fornecida para cenários em que você deseja substituir o esquema de particionamento padrão. Por exemplo, corpos de loop pequeno podem se beneficiar do particionamento do intervalo. O Parallel.ForEach método espera que particionadores personalizados ofereçam suporte ao particionamento dinâmico. Para obter mais informações, consulte Particionadores personalizados para PLINQ e TPL e Como implementar partições dinâmicas.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) em índices de 64 bits em um IEnumerable, no qual iterações podem ser executadas em paralelo, opções de loop podem ser configuradas e o estado de loop pode ser monitorado e manipulado.

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

O tipo de dados na origem.

Parâmetros

source
IEnumerable<TSource>

Uma fonte de dados enumerável.

parallelOptions
ParallelOptions

Um objeto que configura o comportamento dessa operação.

body
Action<TSource,ParallelLoopState,Int64>

O delegado invocado uma vez por iteração.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O CancellationToken no argumento parallelOptions foi cancelado

O argumento source é null.

- ou -

O argumento parallelOptions é null.

- ou -

O argumento body é null.

A exceção que contém todas as exceções individuais lançadas em todos os threads.

O CancellationTokenSource associado ao CancellationToken nas parallelOptions foi descartado.

Comentários

O body delegado é invocado uma vez para cada elemento no source enumerável. Ele é fornecido com os seguintes parâmetros: o elemento atual, uma ParallelLoopState instância que pode ser usada para sair do loop prematuramente e o índice do elemento atual (Int64).

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) em um Partitioner, na qual as iterações podem ser executadas em paralelo e o estado do loop pode ser monitorado e manipulado.

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

O tipo dos elementos em source.

Parâmetros

source
Partitioner<TSource>

O particionador que contém a fonte de dados original.

body
Action<TSource,ParallelLoopState>

O delegado invocado uma vez por iteração.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O argumento source é null.

- ou -

O argumento body é null.

A propriedade SupportsDynamicPartitions no particionador source retorna false.

- ou -

O método no particionador source retorna null.

- ou -

O método GetPartitions(Int32) no particionador source não retorna o número de partições correto.

A exceção que é gerada para conter uma exceção gerada de uma dos delegados especificados.

Comentários

Essa sobrecarga é fornecida para cenários em que você deseja substituir o esquema de particionamento padrão. Por exemplo, corpos de loop pequeno podem se beneficiar do particionamento do intervalo. O Parallel.ForEach método espera que particionadores personalizados ofereçam suporte ao particionamento dinâmico. Para obter mais informações, consulte Particionadores personalizados para PLINQ e TPL e Como implementar partições dinâmicas.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) em um Partitioner no qual as iterações podem ser executadas em 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

O tipo dos elementos em source.

Parâmetros

source
Partitioner<TSource>

O particionador que contém a fonte de dados original.

body
Action<TSource>

O delegado invocado uma vez por iteração.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O argumento source é null.

- ou -

O argumento body é null.

A propriedade SupportsDynamicPartitions no particionador source retorna false.

- ou -

A exceção que é gerada quando qualquer método no particionador source retorna null.

- ou -

O método GetPartitions(Int32) no particionador source não retorna o número de partições correto.

A exceção que é gerada para conter uma exceção gerada de uma dos delegados especificados.

Exemplos

O exemplo a seguir mostra como implementar um particionador de intervalo para uso com 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

Comentários

Essa sobrecarga é fornecida para cenários em que você deseja substituir o esquema de particionamento padrão. Por exemplo, corpos de loop pequeno podem se beneficiar do particionamento do intervalo. O Parallel.ForEach método espera que particionadores personalizados ofereçam suporte ao particionamento dinâmico. Para obter mais informações, consulte Particionadores personalizados para PLINQ e TPL e Como implementar partições dinâmicas.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) com índices de 64 bits em uma IEnumerable na qual as iterações podem ser executadas em paralelo e o estado do loop pode ser monitorado e manipulado.

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

O tipo de dados na origem.

Parâmetros

source
IEnumerable<TSource>

Uma fonte de dados enumerável.

body
Action<TSource,ParallelLoopState,Int64>

O delegado invocado uma vez por iteração.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O argumento source é null.

- ou -

O argumento body é null.

A exceção que contém todas as exceções individuais lançadas em todos os threads.

Comentários

O body delegado é invocado uma vez para cada elemento no source enumerável. Ele é fornecido com os seguintes parâmetros: o elemento atual, uma ParallelLoopState instância que pode ser usada para sair do loop prematuramente e o índice do elemento atual (Int64).

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) em um OrderablePartitioner<TSource>, no qual as iterações podem ser executadas em paralelo e o estado do loop pode ser monitorado e manipulado.

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

O tipo dos elementos em source.

Parâmetros

source
OrderablePartitioner<TSource>

O particionador solicitável que contém a fonte de dados original.

body
Action<TSource,ParallelLoopState,Int64>

O delegado invocado uma vez por iteração.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O argumento source é null.

- ou -

O argumento body é null.

A propriedade SupportsDynamicPartitions no particionador solicitável source retorna false.

- ou -

A propriedade KeysNormalized no particionador solicitável de origem retorna false.

- ou -

Quaisquer métodos no particionador solicitável de origem retorna null.

A exceção gerada de um dos representantes especificados.

Comentários

Essa sobrecarga é fornecida para cenários em que você deseja substituir o esquema de particionamento padrão. Por exemplo, corpos de loop pequeno podem se beneficiar do particionamento do intervalo. O Parallel.ForEach método espera que particionadores personalizados ofereçam suporte ao particionamento dinâmico. Para obter mais informações, consulte Particionadores personalizados para PLINQ e TPL e Como implementar partições dinâmicas.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) em um IEnumerable no qual as iterações podem ser executadas em 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

O tipo de dados na origem.

Parâmetros

source
IEnumerable<TSource>

Uma fonte de dados enumerável.

body
Action<TSource>

O delegado invocado uma vez por iteração.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O argumento source é null.

- ou -

O argumento body é null.

A exceção que contém todas as exceções individuais lançadas em todos os threads.

Exemplos

O exemplo a seguir usa o ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) método para contar o número de vogais e caracteres sem espaço em branco em um arquivo de texto. Nesse caso, o ParallelLoopResult valor retornado pelo método é ignorado. Observe que, como as operações podem ser executadas em paralelo, você deve garantir que incrementar as variáveis de contador seja uma operação atômica e que vários threads não tentem acessar as variáveis de contador simultaneamente. Para essa finalidade, o exemplo usa a lock instrução (em C#) e a SyncLock instrução (no 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

Comentários

O body delegado é invocado uma vez para cada elemento no source enumerável. Ele é fornecido com o elemento atual como um parâmetro.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) em um Partitioner, em que iterações podem ser executadas em paralelo, opções de loop podem ser configuradas e o estado do loop pode ser monitorado e manipulado.

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

O tipo dos elementos em source.

Parâmetros

source
Partitioner<TSource>

O particionador que contém a fonte de dados original.

parallelOptions
ParallelOptions

Um objeto que configura o comportamento dessa operação.

body
Action<TSource,ParallelLoopState>

O delegado invocado uma vez por iteração.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O CancellationToken no argumento parallelOptions é cancelado.

O CancellationTokenSource associado ao CancellationToken nas parallelOptions foi descartado.

O argumento source é null.

- ou -

O argumento parallelOptions é null.

- ou -

O argumento body é null.

A propriedade SupportsDynamicPartitions no particionador source retorna false.

- ou -

A exceção que é gerada quando qualquer método no particionador source retorna null.

A exceção que é gerada para conter uma exceção gerada de uma dos delegados especificados.

Comentários

Essa sobrecarga é fornecida para cenários em que você deseja substituir o esquema de particionamento padrão. Por exemplo, corpos de loop pequeno podem se beneficiar do particionamento do intervalo. O Parallel.ForEach método espera que particionadores personalizados ofereçam suporte ao particionamento dinâmico. Para obter mais informações, consulte Particionadores personalizados para PLINQ e TPL e Como implementar partições dinâmicas.

Confira também

Aplica-se a

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

Origem:
Parallel.cs
Origem:
Parallel.cs
Origem:
Parallel.cs

Executa uma operação foreach (For Each no Visual Basic) em uma IEnumerable na qual as iterações podem ser executadas em paralelo e o estado do loop pode ser monitorado e manipulado.

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

O tipo de dados na origem.

Parâmetros

source
IEnumerable<TSource>

Uma fonte de dados enumerável.

body
Action<TSource,ParallelLoopState>

O delegado invocado uma vez por iteração.

Retornos

Uma estrutura que contém informações sobre qual parte do loop foi concluída.

Exceções

O argumento source é null.

- ou -

O argumento body é null.

A exceção que contém todas as exceções individuais lançadas em todos os threads.

Comentários

O body delegado é invocado uma vez para cada elemento no source enumerável. Ele é fornecido com os seguintes parâmetros: o elemento atual e uma ParallelLoopState instância que pode ser usada para sair do loop prematuramente.

Confira também

Aplica-se a