Parallel.ForEach Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Führt einen foreach
-Vorgang (For Each
in Visual Basic) aus, bei dem Iterationen parallel ausgeführt werden können.
Überlädt
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Führt einen |
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Führt einen |
ForEach<TSource,TLocal>(Partitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Führt einen |
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Führt einen |
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Führt einen |
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Führt einen |
ForEach<TSource,TLocal>(Partitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Führt einen |
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Führt einen |
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource>) |
Führt einen |
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>) |
Führt einen |
ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>) |
Führt einen |
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource>) |
Führt einen |
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>) |
Führt einen |
ForEach<TSource>(Partitioner<TSource>, Action<TSource,ParallelLoopState>) |
Führt einen |
ForEach<TSource>(Partitioner<TSource>, Action<TSource>) |
Führt einen |
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState,Int64>) |
Führt einen |
ForEach<TSource>(OrderablePartitioner<TSource>, Action<TSource,ParallelLoopState,Int64>) |
Führt einen |
ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) |
Führt einen |
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>) |
Führt einen |
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState>) |
Führt einen |
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit threadlokalen Daten für einen IEnumerable aus. Iterationen können parallel ablaufen. Schleifenoptionen sind konfigurierbar. Der Schleifenstatus kann überwacht und angepasst werden.
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
Typparameter
- TSource
Der Typ der Daten in der Quelle.
- TLocal
Der Typ der threadlokalen Daten.
Parameter
- source
- IEnumerable<TSource>
Eine auflistbare Datenquelle.
- parallelOptions
- ParallelOptions
Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.
- localInit
- Func<TLocal>
Der Funktionsdelegat, der den ursprünglichen Zustand der lokalen Daten für jede Aufgabe zurückgibt.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Der Delegat, der einmal pro Iteration aufgerufen wird.
- localFinally
- Action<TLocal>
Der Delegat, der die endgültige Aktion beim lokalen Status jeder Aufgabe ausführt.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Das source
-Argument lautet null
.
- oder -
Das parallelOptions
-Argument lautet null
.
- oder -
Das body
-Argument lautet null
.
- oder -
Das localInit
-Argument lautet null
.
- oder -
Das localFinally
-Argument lautet null
.
Die CancellationToken im parallelOptions
-Argument wird abgebrochen.
Die CancellationTokenSource, die der CancellationToken im parallelOptions
zugeordnet ist, ist gelöscht worden.
Die Ausnahme, die alle einzelnen, auf allen Threads ausgelösten Ausnahmen enthält.
Hinweise
Der body
Delegat wird einmal für jedes Element in der source
Aufzählung aufgerufen. Es wird mit den folgenden Parametern bereitgestellt: das aktuelle Element, ein ParallelLoopState instance, das verwendet werden kann, um vorzeitig aus der Schleife auszubrechen, und einen lokalen Zustand, der für Iterationen freigegeben werden kann, die im gleichen Thread ausgeführt werden.
Der localInit
Delegat wird für jede Aufgabe, die an der Ausführung der Schleife beteiligt ist, einmal aufgerufen und gibt den anfänglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body
Aufrufe für jede Aufgabe übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textaufruf übergeben wird. Schließlich gibt der letzte Textaufruf für jede Aufgabe einen Zustandswert zurück, der an den localFinally
Delegat übergeben wird. Der localFinally
Delegat wird einmal pro Thread aufgerufen, um eine abschließende Aktion für den lokalen Status jeder Aufgabe auszuführen. Dieser Delegat kann für mehrere Aufgaben gleichzeitig aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.
Die Parallel.ForEach -Methode kann über die Lebensdauer ihrer Ausführung mehr Aufgaben als Threads verwenden, wenn vorhandene Aufgaben abgeschlossen und durch neue Aufgaben ersetzt werden. Dadurch erhält das zugrunde liegende TaskScheduler Objekt die Möglichkeit, Threads hinzuzufügen, zu ändern oder zu entfernen, die die Schleife bedienen.
Weitere Informationen
Gilt für:
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit threadlokalen Daten und 64-Bit-Indizes für einen IEnumerable aus. Iterationen können parallel ablaufen. Schleifenoptionen sind konfigurierbar. Der Schleifenstatus kann beobachtet und manipuliert werden.
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
Typparameter
- TSource
Der Typ der Daten in der Quelle.
- TLocal
Der Typ der threadlokalen Daten.
Parameter
- source
- IEnumerable<TSource>
Eine auflistbare Datenquelle.
- parallelOptions
- ParallelOptions
Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.
- localInit
- Func<TLocal>
Der Funktionsdelegat, der den ursprünglichen Zustand der lokalen Daten für jede Aufgabe zurückgibt.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Der Delegat, der einmal pro Iteration aufgerufen wird.
- localFinally
- Action<TLocal>
Der Delegat, der die endgültige Aktion beim lokalen Status jeder Aufgabe ausführt.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Das source
-Argument lautet null
.
- oder -
Das parallelOptions
-Argument lautet null
.
- oder -
Das body
-Argument lautet null
.
- oder -
Das localInit
-Argument lautet null
.
- oder -
Das localFinally
-Argument lautet null
.
Die CancellationToken im parallelOptions
-Argument wird abgebrochen.
Die CancellationTokenSource, die der CancellationToken im parallelOptions
zugeordnet ist, ist gelöscht worden.
Die Ausnahme, die alle einzelnen, auf allen Threads ausgelösten Ausnahmen enthält.
Hinweise
Der body
Delegat wird einmal für jedes Element in der source
Aufzählung aufgerufen. Es wird mit den folgenden Parametern bereitgestellt: das aktuelle Element, ein ParallelLoopState instance, das verwendet werden kann, um vorzeitig aus der Schleife auszubrechen, den Index des aktuellen Elements (Int64) und einen lokalen Zustand, der für Iterationen freigegeben werden kann, die im selben Thread ausgeführt werden.
Der localInit
Delegat wird für jede Aufgabe, die an der Ausführung der Schleife beteiligt ist, einmal aufgerufen und gibt den anfänglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body
Aufrufe für jede Aufgabe übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textaufruf übergeben wird. Schließlich gibt der letzte Textaufruf für jede Aufgabe einen Zustandswert zurück, der an den localFinally
Delegat übergeben wird. Der localFinally
Delegat wird einmal pro Thread aufgerufen, um eine abschließende Aktion für den lokalen Zustand jeder Aufgabe auszuführen. Dieser Delegat kann für mehrere Aufgaben gleichzeitig aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.
Die Parallel.ForEach -Methode kann während der Lebensdauer ihrer Ausführung mehr Aufgaben als Threads verwenden, wenn vorhandene Aufgaben abgeschlossen werden und durch neue Aufgaben ersetzt werden. Dadurch hat das zugrunde liegende TaskScheduler Objekt die Möglichkeit, Threads hinzuzufügen, zu ändern oder zu entfernen, die die Schleife bedienen.
Weitere Informationen
Gilt für:
ForEach<TSource,TLocal>(Partitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit threadlokalen Daten für einen Partitioner aus. Iterationen können parallel ablaufen. Schleifenoptionen sind konfigurierbar. Der Schleifenstatus kann beobachtet und manipuliert werden.
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
Typparameter
- TSource
Der Typ der Elemente in source
.
- TLocal
Der Typ der threadlokalen Daten.
Parameter
- source
- Partitioner<TSource>
Der Partitionierer, der die ursprüngliche Datenquelle enthält.
- parallelOptions
- ParallelOptions
Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.
- localInit
- Func<TLocal>
Der Funktionsdelegat, der den ursprünglichen Zustand der lokalen Daten für jede Aufgabe zurückgibt.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Der Delegat, der einmal pro Iteration aufgerufen wird.
- localFinally
- Action<TLocal>
Der Delegat, der die endgültige Aktion beim lokalen Status jeder Aufgabe ausführt.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Das source
-Argument lautet null
.
- oder -
Das parallelOptions
-Argument lautet null
.
- oder -
Das body
-Argument lautet null
.
- oder -
Das localInit
-Argument lautet null
.
- oder -
Das localFinally
-Argument lautet null
.
Die SupportsDynamicPartitions-Eigenschaft im source
Partitioner gibt false
zurück, oder der Partitionierer gibt die null
-Partitionen zurück.
Die Ausnahme, die alle einzelnen, auf allen Threads ausgelösten Ausnahmen enthält.
Die CancellationToken im parallelOptions
-Argument wird abgebrochen.
Die CancellationTokenSource, die der CancellationToken im parallelOptions
zugeordnet ist, ist gelöscht worden.
Hinweise
Diese Überladung wird für Szenarien bereitgestellt, in denen Sie das Standardpartitionierungsschema außer Kraft setzen möchten. Beispielsweise können kleine Schleifentexte von der Partitionierung des Bereichs profitieren. Die ForEach -Methode erwartet, dass benutzerdefinierte Partitionierer dynamische Partitionierung unterstützen. Diese Überladung wird für Szenarien mit kleinen Schleifentexten bereitgestellt, die von der Partitionierung des statischen Bereichs profitieren können. Partitionierer müssen dynamische Partitionen unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionierer für PLINQ und TPL und Vorgehensweise: Implementieren dynamischer Partitionen.
Der localInit
Delegat wird einmal für jede Aufgabe aufgerufen, die an der Ausführung der Schleife beteiligt ist, und gibt den anfänglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body
Aufrufe für jede Aufgabe übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textaufruf übergeben wird. Schließlich gibt der letzte Textkörperaufruf für jede Aufgabe einen Zustandswert zurück, der an den localFinally
Delegaten übergeben wird. Der localFinally
Delegat wird einmal pro Aufgabe aufgerufen, um eine abschließende Aktion für den lokalen Zustand der einzelnen Aufgaben auszuführen. Dieser Delegat kann für mehrere Aufgaben gleichzeitig aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.
Die Parallel.ForEach -Methode kann während der Lebensdauer ihrer Ausführung mehr Aufgaben als Threads verwenden, wenn vorhandene Aufgaben abgeschlossen werden und durch neue Aufgaben ersetzt werden. Dadurch hat das zugrunde liegende TaskScheduler Objekt die Möglichkeit, Threads hinzuzufügen, zu ändern oder zu entfernen, die die Schleife bedienen.
Weitere Informationen
Gilt für:
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
Vorgang (For Each
in Visual Basic) mit 64-Bit-Indizes und mit threadlokalen Daten für einen aus OrderablePartitioner<TSource> , bei dem Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert und der Zustand der Schleife überwacht und bearbeitet werden kann.
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
Typparameter
- TSource
Der Typ der Elemente in source
.
- TLocal
Der Typ der threadlokalen Daten.
Parameter
Der sortierbare Partitionierer, der die ursprüngliche Datenquelle enthält.
- parallelOptions
- ParallelOptions
Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.
- localInit
- Func<TLocal>
Der Funktionsdelegat, der den ursprünglichen Zustand der lokalen Daten für jede Aufgabe zurückgibt.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Der Delegat, der einmal pro Iteration aufgerufen wird.
- localFinally
- Action<TLocal>
Der Delegat, der die endgültige Aktion beim lokalen Status jeder Aufgabe ausführt.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Das source
-Argument lautet null
.
- oder -
Das parallelOptions
-Argument lautet null
.
- oder -
Das body
-Argument lautet null
.
- oder -
Der localInit
oder das localFinally
-Argument ist null
.
Die SupportsDynamicPartitions-Eigenschaft im source
Partitioner gibt false
zurück, oder der Partitionierer gibt die null
-Partitionen zurück.
Die Ausnahme, die alle einzelnen, auf allen Threads ausgelösten Ausnahmen enthält.
Die CancellationToken im parallelOptions
-Argument wird abgebrochen.
Die CancellationTokenSource, die der CancellationToken im parallelOptions
zugeordnet ist, ist gelöscht worden.
Hinweise
Diese Überladung wird für Szenarien bereitgestellt, in denen Sie das Standardpartitionierungsschema außer Kraft setzen möchten. Beispielsweise können kleine Schleifentexte von der Partitionierung des Bereichs profitieren. Die ForEach -Methode erwartet, dass benutzerdefinierte Partitionierer dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionierer für PLINQ und TPL und Vorgehensweise: Implementieren dynamischer Partitionen.
Der localInit
Delegat wird einmal für jede Aufgabe aufgerufen, die an der Ausführung der Schleife beteiligt ist, und gibt den anfänglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body
Aufrufe für jede Aufgabe übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textaufruf übergeben wird. Schließlich gibt der letzte Texttextaufruf für jeden Thread einen Zustandswert zurück, der an den localFinally
Delegaten übergeben wird. Der localFinally
Delegat wird einmal pro Aufgabe aufgerufen, um eine abschließende Aktion für den lokalen Zustand der einzelnen Aufgaben auszuführen. Dieser Delegat kann für mehrere Aufgaben gleichzeitig aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.
Die Parallel.ForEach -Methode kann während der Lebensdauer ihrer Ausführung mehr Aufgaben als Threads verwenden, wenn vorhandene Aufgaben abgeschlossen werden und durch neue Aufgaben ersetzt werden. Dadurch hat das zugrunde liegende TaskScheduler Objekt die Möglichkeit, Threads hinzuzufügen, zu ändern oder zu entfernen, die die Schleife bedienen.
Weitere Informationen
Gilt für:
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit threadlokalen Daten für einen IEnumerable aus. Iterationen können parallel ablaufen. Der Schleifenstatus kann beobachtet und manipuliert werden.
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
Typparameter
- TSource
Der Typ der Daten in der Quelle.
- TLocal
Der Typ der threadlokalen Daten.
Parameter
- source
- IEnumerable<TSource>
Eine auflistbare Datenquelle.
- localInit
- Func<TLocal>
Der Funktionsdelegat, der den ursprünglichen Zustand der lokalen Daten für jede Aufgabe zurückgibt.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Der Delegat, der einmal pro Iteration aufgerufen wird.
- localFinally
- Action<TLocal>
Der Delegat, der die endgültige Aktion beim lokalen Status jeder Aufgabe ausführt.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Das source
-Argument lautet null
.
- oder -
Das body
-Argument lautet null
.
- oder -
Das localInit
-Argument lautet null
.
- oder -
Das localFinally
-Argument lautet null
.
Die Ausnahme, die alle einzelnen, auf allen Threads ausgelösten Ausnahmen enthält.
Beispiele
Das folgende Beispiel zeigt, wie Sie eine ForEach Methode mit lokalem Zustand verwenden:
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
Hinweise
Der body
Delegat wird einmal für jedes Element in der source
Enumerable aufgerufen. Es wird mit den folgenden Parametern bereitgestellt: das aktuelle Element, ein ParallelLoopState instance, das verwendet werden kann, um vorzeitig aus der Schleife auszubrechen, und einen lokalen Zustand, der von Iterationen gemeinsam verwendet werden kann, die im selben Thread ausgeführt werden.
Der localInit
Delegat wird einmal für jede Aufgabe aufgerufen, die an der Ausführung der Schleife beteiligt ist, und gibt den anfänglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body
Aufrufe für jede Aufgabe übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textaufruf übergeben wird. Schließlich gibt der letzte Textkörperaufruf für jede Aufgabe einen Zustandswert zurück, der an den localFinally
Delegaten übergeben wird. Der localFinally
Delegat wird einmal pro Thread aufgerufen, um eine abschließende Aktion für den lokalen Zustand jeder Aufgabe auszuführen. Dieser Delegat kann für mehrere Aufgaben gleichzeitig aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.
Die Parallel.ForEach -Methode kann über die Lebensdauer ihrer Ausführung mehr Aufgaben als Threads verwenden, wenn vorhandene Aufgaben abgeschlossen und durch neue Aufgaben ersetzt werden. Dadurch erhält das zugrunde liegende TaskScheduler Objekt die Möglichkeit, Threads hinzuzufügen, zu ändern oder zu entfernen, die die Schleife bedienen.
Weitere Informationen
Gilt für:
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit threadlokalen Daten für einen IEnumerable aus. Iterationen können parallel ablaufen. Der Schleifenstatus kann beobachtet und manipuliert werden.
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
Typparameter
- TSource
Der Typ der Daten in der Quelle.
- TLocal
Der Typ der threadlokalen Daten.
Parameter
- source
- IEnumerable<TSource>
Eine auflistbare Datenquelle.
- localInit
- Func<TLocal>
Der Funktionsdelegat, der den ursprünglichen Zustand der lokalen Daten für jede Aufgabe zurückgibt.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Der Delegat, der einmal pro Iteration aufgerufen wird.
- localFinally
- Action<TLocal>
Der Delegat, der die endgültige Aktion beim lokalen Status jeder Aufgabe ausführt.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Das source
-Argument lautet null
.
- oder -
Das body
-Argument lautet null
.
- oder -
Das localInit
-Argument lautet null
.
- oder -
Das localFinally
-Argument lautet null
.
Die Ausnahme, die alle einzelnen, auf allen Threads ausgelösten Ausnahmen enthält.
Hinweise
Der body
Delegat wird einmal für jedes Element in der source
Aufzählung aufgerufen. Es wird mit den folgenden Parametern bereitgestellt: das aktuelle Element, ein ParallelLoopState instance, das verwendet werden kann, um vorzeitig aus der Schleife auszubrechen, den Index des aktuellen Elements (Int64) und einen lokalen Zustand, der für Iterationen freigegeben werden kann, die im selben Thread ausgeführt werden.
Der localInit
Delegat wird für jede Aufgabe, die an der Ausführung der Schleife beteiligt ist, einmal aufgerufen und gibt den anfänglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body
Aufrufe für jede Aufgabe übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textaufruf übergeben wird. Schließlich gibt der letzte Textaufruf für jede Aufgabe einen Zustandswert zurück, der an den localFinally
Delegat übergeben wird. Der localFinally
Delegat wird einmal pro Aufgabe aufgerufen, um eine abschließende Aktion für den lokalen Status jeder Aufgabe auszuführen. Dieser Delegat kann für mehrere Aufgaben gleichzeitig aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.
Die Parallel.ForEach -Methode kann über die Lebensdauer ihrer Ausführung mehr Aufgaben als Threads verwenden, wenn vorhandene Aufgaben abgeschlossen und durch neue Aufgaben ersetzt werden. Dadurch erhält das zugrunde liegende TaskScheduler Objekt die Möglichkeit, Threads hinzuzufügen, zu ändern oder zu entfernen, die die Schleife bedienen.
Weitere Informationen
Gilt für:
ForEach<TSource,TLocal>(Partitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit threadlokalen Daten für einen Partitioner aus. Iterationen können parallel ablaufen. Der Schleifenstatus kann beobachtet und manipuliert werden.
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
Typparameter
- TSource
Der Typ der Elemente in source
.
- TLocal
Der Typ der threadlokalen Daten.
Parameter
- source
- Partitioner<TSource>
Der Partitionierer, der die ursprüngliche Datenquelle enthält.
- localInit
- Func<TLocal>
Der Funktionsdelegat, der den ursprünglichen Zustand der lokalen Daten für jede Aufgabe zurückgibt.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Der Delegat, der einmal pro Iteration aufgerufen wird.
- localFinally
- Action<TLocal>
Der Delegat, der die endgültige Aktion beim lokalen Status jeder Aufgabe ausführt.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Das source
-Argument lautet null
.
- oder -
Das body
-Argument lautet null
.
- oder -
Das localInit
-Argument lautet null
.
- oder -
Das localFinally
-Argument lautet null
.
Die SupportsDynamicPartitions-Eigenschaft im source
Partitioner gibt false
zurück, oder der Partitionierer gibt die null
-Partitionen zurück.
Die Ausnahme, die alle einzelnen, auf allen Threads ausgelösten Ausnahmen enthält.
Hinweise
Diese Überladung wird für Szenarien bereitgestellt, in denen Sie das Standardpartitionierungsschema außer Kraft setzen möchten. Beispielsweise können kleine Schleifenkörper von der Partitionierung des Bereichs profitieren. Die ForEach Methode erwartet, dass benutzerdefinierte Partitionierer dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionierer für PLINQ und TPL und Vorgehensweise: Implementieren dynamischer Partitionen.
Der localInit
Delegat wird für jeden Thread, der an der Ausführung der Schleife teilnimmt, einmal aufgerufen und gibt den anfänglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body
Aufrufe für jede Aufgabe übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textaufruf übergeben wird. Schließlich gibt der letzte Textaufruf für jede Aufgabe einen Zustandswert zurück, der an den localFinally
Delegat übergeben wird. Der localFinally
Delegat wird einmal pro Aufgabe aufgerufen, um eine abschließende Aktion für den lokalen Status jeder Aufgabe auszuführen. Dieser Delegat kann für mehrere Aufgaben gleichzeitig aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.
Die Parallel.ForEach -Methode kann über die Lebensdauer ihrer Ausführung mehr Aufgaben als Threads verwenden, wenn vorhandene Aufgaben abgeschlossen und durch neue Aufgaben ersetzt werden. Dadurch erhält das zugrunde liegende TaskScheduler Objekt die Möglichkeit, Threads hinzuzufügen, zu ändern oder zu entfernen, die die Schleife bedienen.
Weitere Informationen
Gilt für:
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit threadlokalen Daten für einen OrderablePartitioner<TSource> aus. Iterationen können parallel ablaufen. Schleifenoptionen sind konfigurierbar. Der Schleifenstatus kann beobachtet und manipuliert werden.
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
Typparameter
- TSource
Der Typ der Elemente in source
.
- TLocal
Der Typ der threadlokalen Daten.
Parameter
Der sortierbare Partitionierer, der die ursprüngliche Datenquelle enthält.
- localInit
- Func<TLocal>
Der Funktionsdelegat, der den ursprünglichen Zustand der lokalen Daten für jede Aufgabe zurückgibt.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Der Delegat, der einmal pro Iteration aufgerufen wird.
- localFinally
- Action<TLocal>
Der Delegat, der die endgültige Aktion beim lokalen Status jeder Aufgabe ausführt.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Das source
-Argument lautet null
.
- oder -
Das body
-Argument lautet null
.
- oder -
Das localInit
-Argument lautet null
.
- oder -
Das localFinally
-Argument lautet null
.
Die SupportsDynamicPartitions-Eigenschaft im source
Partitioner gibt false
zurück, oder der Partitionierer gibt die null
-Partitionen zurück.
Die Ausnahme, die alle einzelnen, auf allen Threads ausgelösten Ausnahmen enthält.
Hinweise
Diese Überladung wird für Szenarien bereitgestellt, in denen Sie das Standardpartitionierungsschema außer Kraft setzen möchten. Beispielsweise können kleine Schleifenkörper von der Partitionierung des Bereichs profitieren. Die ForEach Methode erwartet, dass benutzerdefinierte Partitionierer dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionierer für PLINQ und TPL und Vorgehensweise: Implementieren dynamischer Partitionen.
Der localInit
Delegat wird für jede Aufgabe, die an der Ausführung der Schleife beteiligt ist, einmal aufgerufen und gibt den anfänglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body
Aufrufe für jede Aufgabe übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textaufruf übergeben wird. Schließlich gibt der letzte Textaufruf für jede Aufgabe einen Zustandswert zurück, der an den localFinally
Delegat übergeben wird. Der localFinally
Delegat wird einmal pro Aufgabe aufgerufen, um eine abschließende Aktion für den lokalen Status jeder Aufgabe auszuführen. Dieser Delegat kann für mehrere Aufgaben gleichzeitig aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.
Die Parallel.ForEach -Methode kann über die Lebensdauer ihrer Ausführung mehr Aufgaben als Threads verwenden, wenn vorhandene Aufgaben abgeschlossen und durch neue Aufgaben ersetzt werden. Dadurch erhält das zugrunde liegende TaskScheduler Objekt die Möglichkeit, Threads hinzuzufügen, zu ändern oder zu entfernen, die die Schleife bedienen.
Weitere Informationen
Gilt für:
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) für ein IEnumerable-Objekt aus. Iterationen können parallel ablaufen. Schleifenoptionen sind konfigurierbar.
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
Typparameter
- TSource
Der Typ der Daten in der Quelle.
Parameter
- source
- IEnumerable<TSource>
Eine auflistbare Datenquelle.
- parallelOptions
- ParallelOptions
Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.
- body
- Action<TSource>
Der Delegat, der einmal pro Iteration aufgerufen wird.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Die CancellationToken im parallelOptions
-Argument wird abgebrochen.
Das source
-Argument lautet null
.
- oder -
Das parallelOptions
-Argument lautet null
.
- oder -
Das body
-Argument lautet null
.
Die Ausnahme, die alle einzelnen, auf allen Threads ausgelösten Ausnahmen enthält.
Die CancellationTokenSource, die der CancellationToken im parallelOptions
zugeordnet ist, ist gelöscht worden.
Hinweise
Der body
Delegat wird einmal für jedes Element in der source
Aufzählung aufgerufen. Es wird mit dem aktuellen Element als Parameter bereitgestellt.
Weitere Informationen
Gilt für:
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) für ein IEnumerable-Objekt aus. Iterationen können parallel ablaufen. Schleifenoptionen sind konfigurierbar. Der Schleifenstatus kann beobachtet und manipuliert werden.
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
Typparameter
- TSource
Der Typ der Daten in der Quelle.
Parameter
- source
- IEnumerable<TSource>
Eine auflistbare Datenquelle.
- parallelOptions
- ParallelOptions
Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.
- body
- Action<TSource,ParallelLoopState>
Der Delegat, der einmal pro Iteration aufgerufen wird.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Die CancellationToken im parallelOptions
-Argument wird abgebrochen.
Das source
-Argument lautet null
.
- oder -
Das parallelOptions
-Argument lautet null
.
- oder -
Das body
-Argument lautet null
.
Die Ausnahme, die alle einzelnen, auf allen Threads ausgelösten Ausnahmen enthält.
Die CancellationTokenSource, die der CancellationToken im parallelOptions
zugeordnet ist, ist gelöscht worden.
Hinweise
Der body
Delegat wird einmal für jedes Element in der source
Aufzählung aufgerufen. Es wird mit den folgenden Parametern bereitgestellt: dem aktuellen Element und einer ParallelLoopState instance, die verwendet werden kann, um vorzeitig aus der Schleife auszubrechen.
Weitere Informationen
Gilt für:
ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit einem OrderablePartitioner<TSource> aus. Iterationen können parallel ablaufen, Schleifenoptionen sind konfigurierbar, und der Schleifenstatus kann beobachtet und manipuliert werden.
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
Typparameter
- TSource
Der Typ der Elemente in source
.
Parameter
Der sortierbare Partitionierer, der die ursprüngliche Datenquelle enthält.
- parallelOptions
- ParallelOptions
Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.
- body
- Action<TSource,ParallelLoopState,Int64>
Der Delegat, der einmal pro Iteration aufgerufen wird.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Die CancellationToken im parallelOptions
-Argument wird abgebrochen.
Das source
-Argument lautet null
.
- oder -
Das parallelOptions
-Argument lautet null
.
- oder -
Das body
-Argument lautet null
.
Die CancellationTokenSource, die der CancellationToken im parallelOptions
zugeordnet ist, ist gelöscht worden.
Die SupportsDynamicPartitions-Eigenschaft im source
sortierbaren Partitionierer gibt false
zurück.
- oder -
Die KeysNormalized-Eigenschaft im source
sortierbaren Partitionierer gibt false
zurück.
- oder -
Die Ausnahme, die ausgelöst wird, wenn irgendwelche Methoden im source
sortierbaren Partitionierer null
zurückgeben.
Die Ausnahme, die ausgelöst wird, um eine Ausnahme zu enthalten, die von einem der angegebenen Delegaten ausgelöst wurde.
Hinweise
Diese Überladung wird für Szenarien bereitgestellt, in denen Sie das Standardpartitionierungsschema außer Kraft setzen möchten. Beispielsweise können kleine Schleifenkörper von der Partitionierung des Bereichs profitieren. Die Parallel.ForEach Methode erwartet, dass benutzerdefinierte Partitionierer dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionierer für PLINQ und TPL und Vorgehensweise: Implementieren dynamischer Partitionen.
Weitere Informationen
Gilt für:
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit einem Partitioner aus. Iterationen können parallel ausgeführt werden, Schleifenoptionen sind konfigurierbar.
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
Typparameter
- TSource
Der Typ der Elemente in source
.
Parameter
- source
- Partitioner<TSource>
Der Partitionierer, der die ursprüngliche Datenquelle enthält.
- parallelOptions
- ParallelOptions
Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.
- body
- Action<TSource>
Der Delegat, der einmal pro Iteration aufgerufen wird.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Die CancellationToken im parallelOptions
-Argument wird abgebrochen.
Die CancellationTokenSource, die der CancellationToken im parallelOptions
zugeordnet ist, ist gelöscht worden.
Das source
-Argument lautet null
.
- oder -
Das parallelOptions
-Argument lautet null
.
- oder -
Das body
-Argument lautet null
.
Die SupportsDynamicPartitions-Eigenschaft im source
-Partitioner gibt false
zurück.
- oder -
Die Ausnahme, die ausgelöst wird, wenn irgendeine Methode im source
-Partitionierer null
zurückgibt.
Die Ausnahme, die ausgelöst wird, um eine Ausnahme zu enthalten, die von einem der angegebenen Delegaten ausgelöst wurde.
Hinweise
Diese Überladung wird für Szenarien bereitgestellt, in denen Sie das Standardpartitionierungsschema außer Kraft setzen möchten. Beispielsweise können kleine Schleifenkörper von der Partitionierung des Bereichs profitieren. Die Parallel.ForEach Methode erwartet, dass benutzerdefinierte Partitionierer dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionierer für PLINQ und TPL und Vorgehensweise: Implementieren dynamischer Partitionen.
Weitere Informationen
Gilt für:
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit 64-Bit-Indizes für einen IEnumerable aus. Iterationen können parallel ablaufen. Schleifenoptionen sind konfigurierbar. Der Schleifenstatus kann beobachtet und manipuliert werden.
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
Typparameter
- TSource
Der Typ der Daten in der Quelle.
Parameter
- source
- IEnumerable<TSource>
Eine auflistbare Datenquelle.
- parallelOptions
- ParallelOptions
Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.
- body
- Action<TSource,ParallelLoopState,Int64>
Der Delegat, der einmal pro Iteration aufgerufen wird.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Die CancellationToken im parallelOptions
-Argument wird abgebrochen.
Das source
-Argument lautet null
.
- oder -
Das parallelOptions
-Argument lautet null
.
- oder -
Das body
-Argument lautet null
.
Die Ausnahme, die alle einzelnen, auf allen Threads ausgelösten Ausnahmen enthält.
Die CancellationTokenSource, die der CancellationToken im parallelOptions
zugeordnet ist, ist gelöscht worden.
Hinweise
Der body
Delegat wird einmal für jedes Element in der source
Aufzählung aufgerufen. Es wird mit den folgenden Parametern bereitgestellt: dem aktuellen Element, einem ParallelLoopState instance, mit dem die Schleife vorzeitig ausgebrochen werden kann, und dem Index des aktuellen Elements (Int64).
Weitere Informationen
Gilt für:
ForEach<TSource>(Partitioner<TSource>, Action<TSource,ParallelLoopState>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit einem Partitioner aus. Iterationen können parallel ablaufen, und der Schleifenstatus kann beobachtet und manipuliert werden.
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
Typparameter
- TSource
Der Typ der Elemente in source
.
Parameter
- source
- Partitioner<TSource>
Der Partitionierer, der die ursprüngliche Datenquelle enthält.
- body
- Action<TSource,ParallelLoopState>
Der Delegat, der einmal pro Iteration aufgerufen wird.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Die SupportsDynamicPartitions-Eigenschaft im source
-Partitioner gibt false
zurück.
- oder -
Eine Methode im source
-Partitioner gibt null
zurück.
- oder -
Die GetPartitions(Int32)-Methode im source
-Partitioner gibt nicht die korrekte Anzahl von Partitionen zurück.
Die Ausnahme, die ausgelöst wird, um eine Ausnahme zu enthalten, die von einem der angegebenen Delegaten ausgelöst wurde.
Hinweise
Diese Überladung wird für Szenarien bereitgestellt, in denen Sie das Standardpartitionierungsschema außer Kraft setzen möchten. Beispielsweise können kleine Schleifentexte von der Partitionierung des Bereichs profitieren. Die Parallel.ForEach -Methode erwartet, dass benutzerdefinierte Partitionierer dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionierer für PLINQ und TPL und Vorgehensweise: Implementieren dynamischer Partitionen.
Weitere Informationen
Gilt für:
ForEach<TSource>(Partitioner<TSource>, Action<TSource>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) für ein Partitioner-Objekt aus, in dem Iterationen parallel ausgeführt werden können.
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
Typparameter
- TSource
Der Typ der Elemente in source
.
Parameter
- source
- Partitioner<TSource>
Der Partitionierer, der die ursprüngliche Datenquelle enthält.
- body
- Action<TSource>
Der Delegat, der einmal pro Iteration aufgerufen wird.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Die SupportsDynamicPartitions-Eigenschaft im source
-Partitioner gibt false
zurück.
- oder -
Die Ausnahme, die ausgelöst wird, wenn irgendeine Methode im source
-Partitionierer null
zurückgibt.
- oder -
Die GetPartitions(Int32)-Methode im source
-Partitioner gibt nicht die korrekte Anzahl von Partitionen zurück.
Die Ausnahme, die ausgelöst wird, um eine Ausnahme zu enthalten, die von einem der angegebenen Delegaten ausgelöst wurde.
Beispiele
Das folgende Beispiel zeigt, wie Sie einen Bereichspartitionierer für die Verwendung mit Parallel.ForEachimplementieren:
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
Hinweise
Diese Überladung wird für Szenarien bereitgestellt, in denen Sie das Standardpartitionierungsschema außer Kraft setzen möchten. Beispielsweise können kleine Schleifentexte von der Partitionierung des Bereichs profitieren. Die Parallel.ForEach -Methode erwartet, dass benutzerdefinierte Partitionierer dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionierer für PLINQ und TPL und Vorgehensweise: Implementieren dynamischer Partitionen.
Weitere Informationen
Gilt für:
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState,Int64>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit 64-Bit-Indizes für einen IEnumerable aus. Iterationen können parallel ausgeführt werden. Der Schleifenzustand kann beobachtet und manipuliert werden.
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
Typparameter
- TSource
Der Typ der Daten in der Quelle.
Parameter
- source
- IEnumerable<TSource>
Eine auflistbare Datenquelle.
- body
- Action<TSource,ParallelLoopState,Int64>
Der Delegat, der einmal pro Iteration aufgerufen wird.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Die Ausnahme, die alle einzelnen, auf allen Threads ausgelösten Ausnahmen enthält.
Hinweise
Der body
Delegat wird einmal für jedes Element in der source
Enumerable aufgerufen. Sie wird mit den folgenden Parametern bereitgestellt: dem aktuellen Element, einem ParallelLoopState instance, der verwendet werden kann, um vorzeitig aus der Schleife herauszubrechen, und dem Index des aktuellen Elements (Int64).
Weitere Informationen
Gilt für:
ForEach<TSource>(OrderablePartitioner<TSource>, Action<TSource,ParallelLoopState,Int64>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit einem OrderablePartitioner<TSource> aus. Iterationen können parallel ablaufen, und der Schleifenstatus kann beobachtet und manipuliert werden.
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
Typparameter
- TSource
Der Typ der Elemente in source
.
Parameter
Der sortierbare Partitionierer, der die ursprüngliche Datenquelle enthält.
- body
- Action<TSource,ParallelLoopState,Int64>
Der Delegat, der einmal pro Iteration aufgerufen wird.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Die SupportsDynamicPartitions-Eigenschaft im source
sortierbaren Partitionierer gibt false
zurück.
- oder -
Die KeysNormalized-Eigenschaft im nach Quelle sortierbaren Partitionierer gibt false
zurück.
- oder -
Sämtliche Methoden im sortierbaren Quellpartitionierer geben null
zurück.
Die Ausnahme, die von einem der angegebenen Delegaten ausgelöst wurde.
Hinweise
Diese Überladung wird für Szenarien bereitgestellt, in denen Sie das Standardpartitionierungsschema außer Kraft setzen möchten. Beispielsweise können kleine Schleifentexte von der Partitionierung des Bereichs profitieren. Die Parallel.ForEach -Methode erwartet, dass benutzerdefinierte Partitionierer dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionierer für PLINQ und TPL und Vorgehensweise: Implementieren dynamischer Partitionen.
Weitere Informationen
Gilt für:
ForEach<TSource>(IEnumerable<TSource>, Action<TSource>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit einem IEnumerable aus. Iterationen können parallel ablaufen.
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
Typparameter
- TSource
Der Typ der Daten in der Quelle.
Parameter
- source
- IEnumerable<TSource>
Eine auflistbare Datenquelle.
- body
- Action<TSource>
Der Delegat, der einmal pro Iteration aufgerufen wird.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Die Ausnahme, die alle einzelnen, auf allen Threads ausgelösten Ausnahmen enthält.
Beispiele
Im folgenden Beispiel wird die ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) -Methode verwendet, um die Anzahl von Vokalen und Nicht-Leerzeichen in einer Textdatei zu zählen. In diesem Fall wird der ParallelLoopResult von der -Methode zurückgegebene Wert ignoriert. Da Vorgänge parallel ausgeführt werden können, müssen Sie sicherstellen, dass das Erhöhen der Zählervariablen ein atomischer Vorgang ist und nicht mehrere Threads versuchen, gleichzeitig auf die Zählervariablen zuzugreifen. Zu diesem Zweck verwendet das Beispiel die lock
-Anweisung (in C#) und die SyncLock
-Anweisung (in 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
Hinweise
Der body
Delegat wird einmal für jedes Element in der source
Enumerable aufgerufen. Es wird mit dem aktuellen -Element als Parameter bereitgestellt.
Weitere Informationen
Gilt für:
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit einem Partitioner aus. Iterationen können parallel ablaufen, Schleifenoptionen sind konfigurierbar, und der Schleifenstatus kann beobachtet und manipuliert werden.
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
Typparameter
- TSource
Der Typ der Elemente in source
.
Parameter
- source
- Partitioner<TSource>
Der Partitionierer, der die ursprüngliche Datenquelle enthält.
- parallelOptions
- ParallelOptions
Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.
- body
- Action<TSource,ParallelLoopState>
Der Delegat, der einmal pro Iteration aufgerufen wird.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Die CancellationToken im parallelOptions
-Argument wird abgebrochen.
Die CancellationTokenSource, die der CancellationToken im parallelOptions
zugeordnet ist, ist gelöscht worden.
Das source
-Argument lautet null
.
- oder -
Das parallelOptions
-Argument lautet null
.
- oder -
Das body
-Argument lautet null
.
Die SupportsDynamicPartitions-Eigenschaft im source
-Partitioner gibt false
zurück.
- oder -
Die Ausnahme, die ausgelöst wird, wenn irgendeine Methode im source
-Partitionierer null
zurückgibt.
Die Ausnahme, die ausgelöst wird, um eine Ausnahme zu enthalten, die von einem der angegebenen Delegaten ausgelöst wurde.
Hinweise
Diese Überladung wird für Szenarien bereitgestellt, in denen Sie das Standardpartitionierungsschema außer Kraft setzen möchten. Beispielsweise können kleine Schleifentexte von der Partitionierung des Bereichs profitieren. Die Parallel.ForEach -Methode erwartet, dass benutzerdefinierte Partitionierer dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionierer für PLINQ und TPL und Vorgehensweise: Implementieren dynamischer Partitionen.
Weitere Informationen
Gilt für:
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState>)
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
- Quelle:
- Parallel.cs
Führt einen foreach
-Vorgang (For Each
in Visual Basic) mit einem IEnumerable aus. Iterationen können parallel ablaufen. Der Schleifenstatus kann beobachtet und manipuliert werden.
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
Typparameter
- TSource
Der Typ der Daten in der Quelle.
Parameter
- source
- IEnumerable<TSource>
Eine auflistbare Datenquelle.
- body
- Action<TSource,ParallelLoopState>
Der Delegat, der einmal pro Iteration aufgerufen wird.
Gibt zurück
Eine Struktur, die Informationen darüber enthält, welcher Abschnitt der Schleife abgeschlossen ist.
Ausnahmen
Die Ausnahme, die alle einzelnen, auf allen Threads ausgelösten Ausnahmen enthält.
Hinweise
Der body
Delegat wird einmal für jedes Element in der source
Enumerable aufgerufen. Es wird mit den folgenden Parametern bereitgestellt: dem aktuellen Element und einem ParallelLoopState instance, der verwendet werden kann, um vorzeitig aus der Schleife auszubrechen.