Udostępnij za pośrednictwem


Parallel.ForEach Metoda

Definicja

Wykonuje operację foreach (For Each w Visual Basic), w której iteracje mogą działać równolegle.

Przeciążenia

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

Wykonuje operację foreach (For Each w Visual Basic) z danymi lokalnymi wątku na IEnumerable, w których iteracje mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Wykonuje operację foreach (For Each w Visual Basic) z danymi lokalnymi wątku i indeksami 64-bitowymi na IEnumerable, w których iteracje mogą być uruchamiane równolegle, opcje pętli można skonfigurować, a stan pętli można monitorować i manipulować.

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

Wykonuje operację foreach (For Each w Visual Basic) z danymi lokalnymi wątku na Partitioner, w których iteracji mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Wykonuje operację foreach (For Each w Visual Basic) przy użyciu indeksów 64-bitowych oraz danych wątkowych lokalnych na OrderablePartitioner<TSource>, w których iteracji mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Wykonuje operację foreach (For Each w Visual Basic) z danymi lokalnymi wątku na IEnumerable, w których iteracji mogą być uruchamiane równolegle, a stan pętli można monitorować i manipulować.

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

Wykonuje operację foreach (For Each w Visual Basic) z danymi lokalnymi wątku na IEnumerable, w których iteracji mogą być uruchamiane równolegle, a stan pętli można monitorować i manipulować.

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

Wykonuje operację foreach (For Each w Visual Basic) z danymi lokalnymi wątku na Partitioner, w których iteracji mogą być uruchamiane równolegle, a stan pętli można monitorować i manipulować.

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

Wykonuje operację foreach (For Each w Visual Basic) z danymi lokalnymi wątku na OrderablePartitioner<TSource>, w których iteracji mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Wykonuje operację foreach (For Each w Visual Basic) na IEnumerable, w której iteracji mogą być uruchamiane równolegle i można skonfigurować opcje pętli.

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

Wykonuje operację foreach (For Each w Visual Basic) na IEnumerable, w której iteracje mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Wykonuje operację foreach (For Each w Visual Basic) na OrderablePartitioner<TSource>, w której iteracji mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Wykonuje operację foreach (For Each w Visual Basic) na Partitioner, w której iteracji mogą być uruchamiane równolegle i można skonfigurować opcje pętli.

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

Wykonuje operację foreach (For Each w Visual Basic) z 64-bitowymi indeksami na IEnumerable, w których iteracje mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Wykonuje operację foreach (For Each w Visual Basic) na Partitioner, w której iteracji mogą działać równolegle, a stan pętli można monitorować i manipulować.

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

Wykonuje operację foreach (For Each w Visual Basic) na Partitioner, w której iteracji mogą działać równolegle.

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

Wykonuje operację foreach (For Each w Visual Basic) z 64-bitowymi indeksami na IEnumerable, w których iteracji mogą być uruchamiane równolegle, a stan pętli można monitorować i manipulować.

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

Wykonuje operację foreach (For Each w Visual Basic) na OrderablePartitioner<TSource>, w której iteracji mogą być uruchamiane równolegle, a stan pętli może być monitorowany i manipulować.

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

Wykonuje operację foreach (For Each w Visual Basic) na IEnumerable, w której iteracji mogą działać równolegle.

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

Wykonuje operację foreach (For Each w Visual Basic) na Partitioner, w której iteracji mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Wykonuje operację foreach (For Each w Visual Basic) na IEnumerable, w której iteracji mogą działać równolegle, a stan pętli można monitorować i manipulować.

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) z danymi lokalnymi wątku na IEnumerable, w których iteracje mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Parametry typu

TSource

Typ danych w źródle.

TLocal

Typ danych wątku lokalnego.

Parametry

source
IEnumerable<TSource>

Wyliczalne źródło danych.

parallelOptions
ParallelOptions

Obiekt, który konfiguruje zachowanie tej operacji.

localInit
Func<TLocal>

Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Delegat wywoływany raz na iterację.

localFinally
Action<TLocal>

Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argumentem source jest null.

— lub —

Argumentem parallelOptions jest null.

— lub —

Argumentem body jest null.

— lub —

Argumentem localInit jest null.

— lub —

Argumentem localFinally jest null.

Argument CancellationToken w argumencie parallelOptions jest anulowany.

Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions został usunięty.

Wyjątek, który zawiera wszystkie wyjątki indywidualne zgłoszone we wszystkich wątkach.

Uwagi

Delegat body jest wywoływany raz dla każdego elementu w source wyliczeń. Jest on dostarczany z następującymi parametrami: bieżącym elementem, wystąpieniem ParallelLoopState , które może zostać użyte do przedwczesnego wydzielenia pętli, oraz niektórych stanów lokalnych, które mogą być współużytkowane przez iteracje wykonywane w tym samym wątku.

Delegat localInit jest wywoływany raz dla każdego zadania, które uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te początkowe stany są przekazywane do pierwszych body wywołań każdego zadania. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnie wywołanie treści dla każdego zadania zwraca wartość stanu przekazywaną do delegata localFinally . Delegat localFinally jest wywoływany raz na wątek, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.

Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia jego wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków obsługujących pętlę.

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) z danymi lokalnymi wątku i indeksami 64-bitowymi na IEnumerable, w których iteracje mogą być uruchamiane równolegle, opcje pętli można skonfigurować, a stan pętli można monitorować i manipulować.

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

Parametry typu

TSource

Typ danych w źródle.

TLocal

Typ danych wątku lokalnego.

Parametry

source
IEnumerable<TSource>

Wyliczalne źródło danych.

parallelOptions
ParallelOptions

Obiekt, który konfiguruje zachowanie tej operacji.

localInit
Func<TLocal>

Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.

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

Delegat wywoływany raz na iterację.

localFinally
Action<TLocal>

Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argumentem source jest null.

— lub —

Argumentem parallelOptions jest null.

— lub —

Argumentem body jest null.

— lub —

Argumentem localInit jest null.

— lub —

Argumentem localFinally jest null.

Argument CancellationToken w argumencie parallelOptions jest anulowany.

Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions został usunięty.

Wyjątek, który zawiera wszystkie wyjątki indywidualne zgłoszone we wszystkich wątkach.

Uwagi

Delegat body jest wywoływany raz dla każdego elementu w source wyliczeń. Jest on dostarczany z następującymi parametrami: bieżącym elementem, wystąpieniem ParallelLoopState , które może służyć do przedwczesnego wydzielenia pętli, indeksu bieżącego elementu (Int64) i stanu lokalnego, które mogą być współużytkowane przez iteracje wykonywane w tym samym wątku.

Delegat localInit jest wywoływany raz dla każdego zadania, które uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te początkowe stany są przekazywane do pierwszych body wywołań każdego zadania. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnie wywołanie treści dla każdego zadania zwraca wartość stanu przekazywaną do delegata localFinally . Delegat localFinally jest wywoływany raz na wątek, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.

Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia jego wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków obsługujących pętlę.

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) z danymi lokalnymi wątku na Partitioner, w których iteracji mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Parametry typu

TSource

Typ elementów w pliku source.

TLocal

Typ danych wątku lokalnego.

Parametry

source
Partitioner<TSource>

Partycjonator zawierający oryginalne źródło danych.

parallelOptions
ParallelOptions

Obiekt, który konfiguruje zachowanie tej operacji.

localInit
Func<TLocal>

Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Delegat wywoływany raz na iterację.

localFinally
Action<TLocal>

Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argumentem source jest null.

— lub —

Argumentem parallelOptions jest null.

— lub —

Argumentem body jest null.

— lub —

Argumentem localInit jest null.

— lub —

Argumentem localFinally jest null.

Właściwość SupportsDynamicPartitions w zwracanych sourcePartitioner wartościach false lub partycjonator zwraca null partycje.

Wyjątek, który zawiera wszystkie wyjątki indywidualne zgłoszone we wszystkich wątkach.

Argument CancellationToken w argumencie parallelOptions jest anulowany.

Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions został usunięty.

Uwagi

To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład małe jednostki pętli mogą korzystać z partycjonowania zakresu. Metoda ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. To przeciążenie jest udostępniane w scenariuszach z małymi ciałami pętli, które mogą korzystać z partycjonowania zakresu statycznego. Partycjonatory muszą obsługiwać partycje dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla plINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).

Delegat localInit jest wywoływany raz dla każdego zadania, które uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te początkowe stany są przekazywane do pierwszych body wywołań każdego zadania. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnie wywołanie treści dla każdego zadania zwraca wartość stanu przekazywaną do delegata localFinally . Delegat localFinally jest wywoływany raz na zadanie, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.

Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia jego wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków obsługujących pętlę.

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) przy użyciu indeksów 64-bitowych oraz danych wątkowych lokalnych na OrderablePartitioner<TSource>, w których iteracji mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Parametry typu

TSource

Typ elementów w pliku source.

TLocal

Typ danych wątku lokalnego.

Parametry

source
OrderablePartitioner<TSource>

Kolejność partycjonatora, który zawiera oryginalne źródło danych.

parallelOptions
ParallelOptions

Obiekt, który konfiguruje zachowanie tej operacji.

localInit
Func<TLocal>

Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.

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

Delegat wywoływany raz na iterację.

localFinally
Action<TLocal>

Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argumentem source jest null.

— lub —

Argumentem parallelOptions jest null.

— lub —

Argumentem body jest null.

— lub —

Argument localInit or localFinally to null.

Właściwość SupportsDynamicPartitions w zwracanych sourcePartitioner wartościach false lub partycjonator zwraca null partycje.

Wyjątek, który zawiera wszystkie wyjątki indywidualne zgłoszone we wszystkich wątkach.

Argument CancellationToken w argumencie parallelOptions jest anulowany.

Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions został usunięty.

Uwagi

To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład małe jednostki pętli mogą korzystać z partycjonowania zakresu. Metoda ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla plINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).

Delegat localInit jest wywoływany raz dla każdego zadania, które uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te początkowe stany są przekazywane do pierwszych body wywołań każdego zadania. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnie wywołanie treści w każdym wątku zwraca wartość stanu przekazywaną do delegata localFinally . Delegat localFinally jest wywoływany raz na zadanie, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.

Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia jego wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków obsługujących pętlę.

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) z danymi lokalnymi wątku na IEnumerable, w których iteracji mogą być uruchamiane równolegle, a stan pętli można monitorować i manipulować.

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

Parametry typu

TSource

Typ danych w źródle.

TLocal

Typ danych wątku lokalnego.

Parametry

source
IEnumerable<TSource>

Wyliczalne źródło danych.

localInit
Func<TLocal>

Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Delegat wywoływany raz na iterację.

localFinally
Action<TLocal>

Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argumentem source jest null.

— lub —

Argumentem body jest null.

— lub —

Argumentem localInit jest null.

— lub —

Argumentem localFinally jest null.

Wyjątek, który zawiera wszystkie wyjątki indywidualne zgłoszone we wszystkich wątkach.

Przykłady

W poniższym przykładzie pokazano, jak używać metody ze stanem ForEach lokalnym:

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

Uwagi

Delegat body jest wywoływany raz dla każdego elementu w source wyliczeń. Jest on dostarczany z następującymi parametrami: bieżącym elementem, wystąpieniem ParallelLoopState , które może zostać użyte do przedwczesnego wydzielenia pętli, oraz niektórych stanów lokalnych, które mogą być współużytkowane przez iteracje wykonywane w tym samym wątku.

Delegat localInit jest wywoływany raz dla każdego zadania, które uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te początkowe stany są przekazywane do pierwszych body wywołań każdego zadania. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnie wywołanie treści dla każdego zadania zwraca wartość stanu przekazywaną do delegata localFinally . Delegat localFinally jest wywoływany raz na wątek, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.

Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia jego wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków obsługujących pętlę.

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) z danymi lokalnymi wątku na IEnumerable, w których iteracji mogą być uruchamiane równolegle, a stan pętli można monitorować i manipulować.

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

Parametry typu

TSource

Typ danych w źródle.

TLocal

Typ danych wątku lokalnego.

Parametry

source
IEnumerable<TSource>

Wyliczalne źródło danych.

localInit
Func<TLocal>

Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.

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

Delegat wywoływany raz na iterację.

localFinally
Action<TLocal>

Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argumentem source jest null.

— lub —

Argumentem body jest null.

— lub —

Argumentem localInit jest null.

— lub —

Argumentem localFinally jest null.

Wyjątek, który zawiera wszystkie wyjątki indywidualne zgłoszone we wszystkich wątkach.

Uwagi

Delegat body jest wywoływany raz dla każdego elementu w source wyliczeń. Jest on dostarczany z następującymi parametrami: bieżącym elementem, wystąpieniem ParallelLoopState , które może służyć do przedwczesnego wydzielenia pętli, indeksu bieżącego elementu (Int64) i stanu lokalnego, które mogą być współużytkowane przez iteracje wykonywane w tym samym wątku.

Delegat localInit jest wywoływany raz dla każdego zadania, które uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te początkowe stany są przekazywane do pierwszych body wywołań każdego zadania. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnie wywołanie treści dla każdego zadania zwraca wartość stanu przekazywaną do delegata localFinally . Delegat localFinally jest wywoływany raz na zadanie, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.

Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia jego wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków obsługujących pętlę.

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) z danymi lokalnymi wątku na Partitioner, w których iteracji mogą być uruchamiane równolegle, a stan pętli można monitorować i manipulować.

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

Parametry typu

TSource

Typ elementów w pliku source.

TLocal

Typ danych wątku lokalnego.

Parametry

source
Partitioner<TSource>

Partycjonator zawierający oryginalne źródło danych.

localInit
Func<TLocal>

Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Delegat wywoływany raz na iterację.

localFinally
Action<TLocal>

Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argumentem source jest null.

— lub —

Argumentem body jest null.

— lub —

Argumentem localInit jest null.

— lub —

Argumentem localFinally jest null.

Właściwość SupportsDynamicPartitions w zwracanych sourcePartitioner wartościach false lub partycjonator zwraca null partycje.

Wyjątek, który zawiera wszystkie wyjątki indywidualne zgłoszone we wszystkich wątkach.

Uwagi

To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład małe jednostki pętli mogą korzystać z partycjonowania zakresu. Metoda ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla plINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).

Delegat localInit jest wywoływany raz dla każdego wątku, który uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te początkowe stany są przekazywane do pierwszych body wywołań każdego zadania. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnie wywołanie treści dla każdego zadania zwraca wartość stanu przekazywaną do delegata localFinally . Delegat localFinally jest wywoływany raz na zadanie, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.

Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia jego wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków obsługujących pętlę.

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) z danymi lokalnymi wątku na OrderablePartitioner<TSource>, w których iteracji mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Parametry typu

TSource

Typ elementów w pliku source.

TLocal

Typ danych wątku lokalnego.

Parametry

source
OrderablePartitioner<TSource>

Kolejność partycjonatora, który zawiera oryginalne źródło danych.

localInit
Func<TLocal>

Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.

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

Delegat wywoływany raz na iterację.

localFinally
Action<TLocal>

Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argumentem source jest null.

— lub —

Argumentem body jest null.

— lub —

Argumentem localInit jest null.

— lub —

Argumentem localFinally jest null.

Właściwość SupportsDynamicPartitions w zwracanych sourcePartitioner wartościach false lub partycjonator zwraca null partycje.

Wyjątek, który zawiera wszystkie wyjątki indywidualne zgłoszone we wszystkich wątkach.

Uwagi

To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład małe jednostki pętli mogą korzystać z partycjonowania zakresu. Metoda ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla plINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).

Delegat localInit jest wywoływany raz dla każdego zadania, które uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te początkowe stany są przekazywane do pierwszych body wywołań każdego zadania. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnie wywołanie treści dla każdego zadania zwraca wartość stanu przekazywaną do delegata localFinally . Delegat localFinally jest wywoływany raz na zadanie, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.

Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia jego wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków obsługujących pętlę.

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) na IEnumerable, w której iteracji mogą być uruchamiane równolegle i można skonfigurować opcje pętli.

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

Parametry typu

TSource

Typ danych w źródle.

Parametry

source
IEnumerable<TSource>

Wyliczalne źródło danych.

parallelOptions
ParallelOptions

Obiekt, który konfiguruje zachowanie tej operacji.

body
Action<TSource>

Delegat wywoływany raz na iterację.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argument CancellationToken w argumencie parallelOptions jest anulowany

Argumentem source jest null.

— lub —

Argumentem parallelOptions jest null.

— lub —

Argumentem body jest null.

Wyjątek, który zawiera wszystkie wyjątki indywidualne zgłoszone we wszystkich wątkach.

Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions został usunięty.

Uwagi

Delegat body jest wywoływany raz dla każdego elementu w source wyliczeń. Jest on dostarczany z bieżącym elementem jako parametrem.

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) na IEnumerable, w której iteracje mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Parametry typu

TSource

Typ danych w źródle.

Parametry

source
IEnumerable<TSource>

Wyliczalne źródło danych.

parallelOptions
ParallelOptions

Obiekt, który konfiguruje zachowanie tej operacji.

body
Action<TSource,ParallelLoopState>

Delegat wywoływany raz na iterację.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argument CancellationToken w argumencie parallelOptions jest anulowany

Argumentem source jest null.

— lub —

Argumentem parallelOptions jest null.

— lub —

Argumentem body jest null.

Wyjątek, który zawiera wszystkie wyjątki indywidualne zgłoszone we wszystkich wątkach.

Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions został usunięty.

Uwagi

Delegat body jest wywoływany raz dla każdego elementu w source wyliczeń. Jest on dostarczany z następującymi parametrami: bieżącym elementem i wystąpieniem ParallelLoopState , które może służyć do przedwczesnego wyłamywania pętli.

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) na OrderablePartitioner<TSource>, w której iteracji mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Parametry typu

TSource

Typ elementów w pliku source.

Parametry

source
OrderablePartitioner<TSource>

Kolejność partycjonatora, który zawiera oryginalne źródło danych.

parallelOptions
ParallelOptions

Obiekt, który konfiguruje zachowanie tej operacji.

body
Action<TSource,ParallelLoopState,Int64>

Delegat wywoływany raz na iterację.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argument CancellationToken w argumencie parallelOptions jest anulowany

Argumentem source jest null.

— lub —

Argumentem parallelOptions jest null.

— lub —

Argumentem body jest null.

Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions został usunięty.

Właściwość SupportsDynamicPartitions w uporządkowanym partycjonatorze source zwraca wartość false.

— lub —

Właściwość KeysNormalized w uporządkowanym partycjonatorze source zwraca wartość false.

— lub —

Wyjątek zgłaszany, gdy wszystkie metody w uporządkowanym partycjonatorze source zwracają wartość null.

Zgłoszony wyjątek zawiera wyjątek zgłoszony przez jednego z określonych delegatów.

Uwagi

To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład małe jednostki pętli mogą korzystać z partycjonowania zakresu. Metoda Parallel.ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla plINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) na Partitioner, w której iteracji mogą być uruchamiane równolegle i można skonfigurować opcje pętli.

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

Parametry typu

TSource

Typ elementów w pliku source.

Parametry

source
Partitioner<TSource>

Partycjonator zawierający oryginalne źródło danych.

parallelOptions
ParallelOptions

Obiekt, który konfiguruje zachowanie tej operacji.

body
Action<TSource>

Delegat wywoływany raz na iterację.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argument CancellationToken w argumencie parallelOptions jest anulowany.

Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions został usunięty.

Argumentem source jest null.

— lub —

Argumentem parallelOptions jest null.

— lub —

Argumentem body jest null.

Właściwość SupportsDynamicPartitions w partycjonatorze source zwraca wartość false.

— lub —

Wyjątek zgłaszany, gdy wszystkie metody w partycjonatorze source zwracają wartość null.

Zgłoszony wyjątek zawiera wyjątek zgłoszony przez jednego z określonych delegatów.

Uwagi

To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład małe jednostki pętli mogą korzystać z partycjonowania zakresu. Metoda Parallel.ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla plINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) z 64-bitowymi indeksami na IEnumerable, w których iteracje mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Parametry typu

TSource

Typ danych w źródle.

Parametry

source
IEnumerable<TSource>

Wyliczalne źródło danych.

parallelOptions
ParallelOptions

Obiekt, który konfiguruje zachowanie tej operacji.

body
Action<TSource,ParallelLoopState,Int64>

Delegat wywoływany raz na iterację.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argument CancellationToken w argumencie parallelOptions jest anulowany

Argumentem source jest null.

— lub —

Argumentem parallelOptions jest null.

— lub —

Argumentem body jest null.

Wyjątek, który zawiera wszystkie wyjątki indywidualne zgłoszone we wszystkich wątkach.

Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions został usunięty.

Uwagi

Delegat body jest wywoływany raz dla każdego elementu w source wyliczeń. Jest on dostarczany z następującymi parametrami: bieżącym elementem, wystąpieniem ParallelLoopState , które może służyć do przedwczesnego wyłamywania pętli i indeksu bieżącego elementu (Int64).

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) na Partitioner, w której iteracji mogą działać równolegle, a stan pętli można monitorować i manipulować.

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

Parametry typu

TSource

Typ elementów w pliku source.

Parametry

source
Partitioner<TSource>

Partycjonator zawierający oryginalne źródło danych.

body
Action<TSource,ParallelLoopState>

Delegat wywoływany raz na iterację.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argumentem source jest null.

— lub —

Argumentem body jest null.

Właściwość SupportsDynamicPartitions w partycjonatorze source zwraca wartość false.

— lub —

Metoda w partycjonatorze source zwraca wartość null.

— lub —

Metoda GetPartitions(Int32) w partycjonatorze source nie zwraca poprawnej liczby partycji.

Zgłoszony wyjątek zawiera wyjątek zgłoszony przez jednego z określonych delegatów.

Uwagi

To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład małe jednostki pętli mogą korzystać z partycjonowania zakresu. Metoda Parallel.ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla plINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) na Partitioner, w której iteracji mogą działać równolegle.

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

Parametry typu

TSource

Typ elementów w pliku source.

Parametry

source
Partitioner<TSource>

Partycjonator zawierający oryginalne źródło danych.

body
Action<TSource>

Delegat wywoływany raz na iterację.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argumentem source jest null.

— lub —

Argumentem body jest null.

Właściwość SupportsDynamicPartitions w partycjonatorze source zwraca wartość false.

— lub —

Wyjątek zgłaszany, gdy wszystkie metody w partycjonatorze source zwracają wartość null.

— lub —

Metoda GetPartitions(Int32) w partycjonatorze source nie zwraca poprawnej liczby partycji.

Zgłoszony wyjątek zawiera wyjątek zgłoszony przez jednego z określonych delegatów.

Przykłady

W poniższym przykładzie pokazano, jak zaimplementować partycjonator zakresu do użycia z usługą 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

Uwagi

To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład małe jednostki pętli mogą korzystać z partycjonowania zakresu. Metoda Parallel.ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla plINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) z 64-bitowymi indeksami na IEnumerable, w których iteracji mogą być uruchamiane równolegle, a stan pętli można monitorować i manipulować.

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

Parametry typu

TSource

Typ danych w źródle.

Parametry

source
IEnumerable<TSource>

Wyliczalne źródło danych.

body
Action<TSource,ParallelLoopState,Int64>

Delegat wywoływany raz na iterację.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argumentem source jest null.

— lub —

Argumentem body jest null.

Wyjątek, który zawiera wszystkie wyjątki indywidualne zgłoszone we wszystkich wątkach.

Uwagi

Delegat body jest wywoływany raz dla każdego elementu w source wyliczeń. Jest on dostarczany z następującymi parametrami: bieżącym elementem, wystąpieniem ParallelLoopState , które może służyć do przedwczesnego wyłamywania pętli i indeksu bieżącego elementu (Int64).

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) na OrderablePartitioner<TSource>, w której iteracji mogą być uruchamiane równolegle, a stan pętli może być monitorowany i manipulować.

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

Parametry typu

TSource

Typ elementów w pliku source.

Parametry

source
OrderablePartitioner<TSource>

Kolejność partycjonatora, który zawiera oryginalne źródło danych.

body
Action<TSource,ParallelLoopState,Int64>

Delegat wywoływany raz na iterację.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argumentem source jest null.

— lub —

Argumentem body jest null.

Właściwość SupportsDynamicPartitions w uporządkowanym partycjonatorze source zwraca wartość false.

— lub —

Właściwość KeysNormalized w źródłowym partycjonatorze uporządkowanym zwraca wartość false.

— lub —

Wszystkie metody w źródłowym uporządkowanym partycjonatorze zwracają wartość null.

Wyjątek zgłoszony przez jednego z określonych delegatów.

Uwagi

To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład małe jednostki pętli mogą korzystać z partycjonowania zakresu. Metoda Parallel.ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla plINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) na IEnumerable, w której iteracji mogą działać równolegle.

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

Parametry typu

TSource

Typ danych w źródle.

Parametry

source
IEnumerable<TSource>

Wyliczalne źródło danych.

body
Action<TSource>

Delegat wywoływany raz na iterację.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argumentem source jest null.

— lub —

Argumentem body jest null.

Wyjątek, który zawiera wszystkie wyjątki indywidualne zgłoszone we wszystkich wątkach.

Przykłady

W poniższym przykładzie użyto ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) metody , aby zliczyć liczbę ślubów i znaków innych niż białe spacje w pliku tekstowym. W takim przypadku ParallelLoopResult wartość zwracana przez metodę jest ignorowana. Należy pamiętać, że ponieważ operacje mogą być uruchamiane równolegle, należy upewnić się, że zwiększanie zmiennych licznika jest operacją niepodzielna i że wiele wątków nie próbuje jednocześnie uzyskać dostępu do zmiennych licznika. W tym celu w przykładzie użyto instrukcji lock (w języku C#) i instrukcji SyncLock (w 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

Uwagi

Delegat body jest wywoływany raz dla każdego elementu w source wyliczeń. Jest on dostarczany z bieżącym elementem jako parametrem.

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) na Partitioner, w której iteracji mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.

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

Parametry typu

TSource

Typ elementów w pliku source.

Parametry

source
Partitioner<TSource>

Partycjonator zawierający oryginalne źródło danych.

parallelOptions
ParallelOptions

Obiekt, który konfiguruje zachowanie tej operacji.

body
Action<TSource,ParallelLoopState>

Delegat wywoływany raz na iterację.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argument CancellationToken w argumencie parallelOptions jest anulowany.

Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions został usunięty.

Argumentem source jest null.

— lub —

Argumentem parallelOptions jest null.

— lub —

Argumentem body jest null.

Właściwość SupportsDynamicPartitions w partycjonatorze source zwraca wartość false.

— lub —

Wyjątek zgłaszany, gdy wszystkie metody w partycjonatorze source zwracają wartość null.

Zgłoszony wyjątek zawiera wyjątek zgłoszony przez jednego z określonych delegatów.

Uwagi

To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład małe jednostki pętli mogą korzystać z partycjonowania zakresu. Metoda Parallel.ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla plINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).

Dotyczy

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

Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs
Źródło:
Parallel.cs

Wykonuje operację foreach (For Each w Visual Basic) na IEnumerable, w której iteracji mogą działać równolegle, a stan pętli można monitorować i manipulować.

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

Parametry typu

TSource

Typ danych w źródle.

Parametry

source
IEnumerable<TSource>

Wyliczalne źródło danych.

body
Action<TSource,ParallelLoopState>

Delegat wywoływany raz na iterację.

Zwraca

Struktura zawierająca informacje o ukończonej części pętli.

Wyjątki

Argumentem source jest null.

— lub —

Argumentem body jest null.

Wyjątek, który zawiera wszystkie wyjątki indywidualne zgłoszone we wszystkich wątkach.

Uwagi

Delegat body jest wywoływany raz dla każdego elementu w source wyliczeń. Jest on dostarczany z następującymi parametrami: bieżącym elementem i wystąpieniem ParallelLoopState , które może służyć do przedwczesnego wyłamywania pętli.

Dotyczy