Freigeben über


Parallel.ForEach Methode

Definition

Führt einen foreach (For Each in Visual Basic) aus, bei dem Iterationen parallel ausgeführt werden können.

Überlädt

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

Führt einen foreach -Vorgang (For Each in Visual Basic) mit threadlokalen Daten in einem IEnumerable aus, in dem Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet werden.

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

Führt einen foreach (For Each in Visual Basic) mit threadlokalen Daten und 64-Bit-Indizes für eine IEnumerable aus, in der Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet werden.

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

Führt einen foreach -Vorgang (For Each in Visual Basic) mit threadlokalen Daten in einem Partitioner aus, in dem Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet werden.

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

Führt einen foreach -Vorgang (For Each in Visual Basic) mit 64-Bit-Indizes und mit threadlokalen Daten in einem OrderablePartitioner<TSource> aus, in dem Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet werden.

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

Führt einen foreach (For Each in Visual Basic) mit threadlokalen Daten in einem IEnumerable aus, in dem Iterationen parallel ausgeführt werden können, und der Zustand der Schleife kann überwacht und bearbeitet werden.

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

Führt einen foreach -Vorgang (For Each in Visual Basic) mit threadlokalen Daten in einem IEnumerable aus, in dem Iterationen parallel ausgeführt werden können und der Zustand der Schleife überwacht und bearbeitet werden kann.

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

Führt einen foreach (For Each in Visual Basic) mit threadlokalen Daten in einem Partitioner aus, in dem Iterationen parallel ausgeführt werden können und der Zustand der Schleife überwacht und bearbeitet werden kann.

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

Führt einen foreach -Vorgang (For Each in Visual Basic) mit threadlokalen Daten in einem OrderablePartitioner<TSource> aus, in dem Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet werden.

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

Führt einen foreach -Vorgang (For Each in Visual Basic) für einen IEnumerable aus, in dem Iterationen in Parallel- und Schleifenoptionen ausgeführt werden können.

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

Führt einen foreach -Vorgang (For Each in Visual Basic) für eine IEnumerable aus, in der Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet werden.

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

Führt einen foreach -Vorgang (For Each in Visual Basic) für einen OrderablePartitioner<TSource> aus, in dem Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet werden.

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

Führt einen foreach -Vorgang (For Each in Visual Basic) für einen Partitioner aus, in dem Iterationen in Parallel- und Schleifenoptionen ausgeführt werden können.

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

Führt einen foreach (For Each in Visual Basic) -Vorgang mit 64-Bit-Indizes für eine IEnumerable aus, in der Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet werden.

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

Führt einen foreach (For Each in Visual Basic) für einen Partitioner aus, in dem Iterationen parallel ausgeführt werden können, und der Zustand der Schleife kann überwacht und bearbeitet werden.

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

Führt einen foreach -Vorgang (For Each in Visual Basic) für einen Partitioner aus, in dem Iterationen parallel ausgeführt werden können.

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

Führt einen foreach (For Each in Visual Basic) mit 64-Bit-Indizes für eine IEnumerable aus, in der Iterationen parallel ausgeführt werden können, und der Zustand der Schleife kann überwacht und bearbeitet werden.

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

Führt einen foreach -Vorgang (For Each in Visual Basic) für einen OrderablePartitioner<TSource> aus, in dem Iterationen parallel ausgeführt werden können und der Zustand der Schleife überwacht und bearbeitet werden kann.

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

Führt einen foreach -Vorgang (For Each in Visual Basic) für einen IEnumerable aus, in dem Iterationen parallel ausgeführt werden können.

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

Führt einen foreach -Vorgang (For Each in Visual Basic) für einen Partitioner aus, in dem Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet werden.

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

Führt einen foreach (For Each in Visual Basic) Vorgang für eine IEnumerable aus, in der Iterationen parallel ausgeführt werden können, und der Zustand der Schleife kann überwacht und bearbeitet werden.

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

Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach -Vorgang (For Each in Visual Basic) mit threadlokalen Daten in einem IEnumerable aus, in dem Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet 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 aufzählbare Datenquelle.

parallelOptions
ParallelOptions

Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.

localInit
Func<TLocal>

Der Funktionsdelegat, der den Anfangszustand der lokalen Daten für jede Aufgabe zurückgibt.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

localFinally
Action<TLocal>

Der Delegat, der eine endgültige Aktion für den lokalen Zustand jeder Aufgabe ausführt.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das source Argument ist null.

- oder -

Das parallelOptions Argument ist null.

- oder -

Das body Argument ist null.

- oder -

Das localInit Argument ist null.

- oder -

Das localFinally Argument ist null.

Das CancellationToken Argument parallelOptions wird abgebrochen.

Das CancellationTokenSource zugeordnete In wurde CancellationTokenparallelOptions gelöscht.

Die Ausnahme, die alle einzelnen Ausnahmen enthält, die in allen Threads ausgelöst werden.

Hinweise

Die body Stellvertretung wird einmal für jedes Element in der source Enumeration aufgerufen. Es wird mit den folgenden Parametern bereitgestellt: dem aktuellen Element, einer ParallelLoopState Instanz, die zum vorzeitigen Ausbrechen der Schleife verwendet werden kann, und einige lokale Zustände, die unter Iterationen gemeinsam verwendet werden können, die im selben Thread ausgeführt werden.

Der localInit Delegat wird einmal für jede Aufgabe aufgerufen, die an der Ausführung der Schleife teilnimmt, und gibt den ursprünglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body Aufrufe für jeden Vorgang übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textkörperaufruf ü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 endgültige Aktion für den lokalen Zustand jeder Aufgabe auszuführen. Diese Stellvertretung kann gleichzeitig für mehrere Aufgaben aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.

Die Parallel.ForEach Methode kann mehr Aufgaben als Threads über die Lebensdauer der Ausführung verwenden, da vorhandene Aufgaben abgeschlossen sind 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 verwenden.

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
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach (For Each in Visual Basic) mit threadlokalen Daten und 64-Bit-Indizes für eine IEnumerable aus, in der Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet 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 aufzählbare Datenquelle.

parallelOptions
ParallelOptions

Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.

localInit
Func<TLocal>

Der Funktionsdelegat, der den Anfangszustand der lokalen Daten für jede Aufgabe zurückgibt.

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

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

localFinally
Action<TLocal>

Der Delegat, der eine endgültige Aktion für den lokalen Zustand jeder Aufgabe ausführt.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das source Argument ist null.

- oder -

Das parallelOptions Argument ist null.

- oder -

Das body Argument ist null.

- oder -

Das localInit Argument ist null.

- oder -

Das localFinally Argument ist null.

Das CancellationToken Argument parallelOptions wird abgebrochen.

Das CancellationTokenSource zugeordnete In wurde CancellationTokenparallelOptions gelöscht.

Die Ausnahme, die alle einzelnen Ausnahmen enthält, die in allen Threads ausgelöst werden.

Hinweise

Die body Stellvertretung wird einmal für jedes Element in der source Enumeration aufgerufen. Es wird mit den folgenden Parametern bereitgestellt: dem aktuellen Element, einer ParallelLoopState Instanz, die verwendet werden kann, um vorzeitig aus der Schleife zu brechen, den Index (Int64) des aktuellen Elements und einen lokalen Zustand, der unter 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 teilnimmt, und gibt den ursprünglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body Aufrufe für jeden Vorgang übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textkörperaufruf ü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 endgültige Aktion für den lokalen Zustand jeder Aufgabe auszuführen. Diese Stellvertretung kann gleichzeitig für mehrere Aufgaben aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.

Die Parallel.ForEach Methode kann mehr Aufgaben als Threads über die Lebensdauer der Ausführung verwenden, da vorhandene Aufgaben abgeschlossen sind 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 verwenden.

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
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach -Vorgang (For Each in Visual Basic) mit threadlokalen Daten in einem Partitioner aus, in dem Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet 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>

Die Partitionierung, die die ursprüngliche Datenquelle enthält.

parallelOptions
ParallelOptions

Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.

localInit
Func<TLocal>

Der Funktionsdelegat, der den Anfangszustand der lokalen Daten für jede Aufgabe zurückgibt.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

localFinally
Action<TLocal>

Der Delegat, der eine endgültige Aktion für den lokalen Zustand jeder Aufgabe ausführt.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das source Argument ist null.

- oder -

Das parallelOptions Argument ist null.

- oder -

Das body Argument ist null.

- oder -

Das localInit Argument ist null.

- oder -

Das localFinally Argument ist null.

Die SupportsDynamicPartitions Eigenschaft in der sourcePartitionerfalse Rückgabe oder der Partitioner gibt Partitionen zurück.null

Die Ausnahme, die alle einzelnen Ausnahmen enthält, die in allen Threads ausgelöst werden.

Das CancellationToken Argument parallelOptions wird abgebrochen.

Das CancellationTokenSource zugeordnete In wurde CancellationTokenparallelOptions gelöscht.

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 die dynamische Partitionierung unterstützen. Diese Überladung wird für Szenarien mit kleinen Schleifentexten bereitgestellt, die von der Partitionierung statischer Bereiche profitieren können. Partitionierer müssen dynamische Partitionen unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionen für PLINQ und TPL und How to: Implement Dynamic Partitions.

Der localInit Delegat wird einmal für jede Aufgabe aufgerufen, die an der Ausführung der Schleife teilnimmt, und gibt den ursprünglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body Aufrufe für jeden Vorgang übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textkörperaufruf ü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 endgültige Aktion für den lokalen Zustand der einzelnen Aufgaben auszuführen. Diese Stellvertretung kann gleichzeitig für mehrere Aufgaben aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.

Die Parallel.ForEach Methode kann mehr Aufgaben als Threads über die Lebensdauer der Ausführung verwenden, da vorhandene Aufgaben abgeschlossen sind 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 verwenden.

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
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach -Vorgang (For Each in Visual Basic) mit 64-Bit-Indizes und mit threadlokalen Daten in einem OrderablePartitioner<TSource> aus, in dem Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet werden.

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

source
OrderablePartitioner<TSource>

Der geordnete 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 Anfangszustand der lokalen Daten für jede Aufgabe zurückgibt.

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

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

localFinally
Action<TLocal>

Der Delegat, der eine endgültige Aktion für den lokalen Zustand jeder Aufgabe ausführt.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das source Argument ist null.

- oder -

Das parallelOptions Argument ist null.

- oder -

Das body Argument ist null.

- oder -

Das Argument oder localFinally das localInit Argument ist null.

Die SupportsDynamicPartitions Eigenschaft in der sourcePartitionerfalse Rückgabe oder der Partitioner gibt Partitionen zurück.null

Die Ausnahme, die alle einzelnen Ausnahmen enthält, die in allen Threads ausgelöst werden.

Das CancellationToken Argument parallelOptions wird abgebrochen.

Das CancellationTokenSource zugeordnete In wurde CancellationTokenparallelOptions gelöscht.

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 die dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionen für PLINQ und TPL und How to: Implement Dynamic Partitions.

Der localInit Delegat wird einmal für jede Aufgabe aufgerufen, die an der Ausführung der Schleife teilnimmt, und gibt den ursprünglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body Aufrufe für jeden Vorgang übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textkörperaufruf übergeben wird. Schließlich gibt der letzte Textkörperaufruf 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 endgültige Aktion für den lokalen Zustand der einzelnen Aufgaben auszuführen. Diese Stellvertretung kann gleichzeitig für mehrere Aufgaben aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.

Die Parallel.ForEach Methode kann mehr Aufgaben als Threads über die Lebensdauer der Ausführung verwenden, da vorhandene Aufgaben abgeschlossen sind 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 verwenden.

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
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach (For Each in Visual Basic) mit threadlokalen Daten in einem IEnumerable aus, in dem Iterationen parallel ausgeführt werden können, und der Zustand der Schleife kann überwacht und bearbeitet 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 aufzählbare Datenquelle.

localInit
Func<TLocal>

Der Funktionsdelegat, der den Anfangszustand der lokalen Daten für jede Aufgabe zurückgibt.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

localFinally
Action<TLocal>

Der Delegat, der eine endgültige Aktion für den lokalen Zustand jeder Aufgabe ausführt.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das source Argument ist null.

- oder -

Das body Argument ist null.

- oder -

Das localInit Argument ist null.

- oder -

Das localFinally Argument ist null.

Die Ausnahme, die alle einzelnen Ausnahmen enthält, die in allen Threads ausgelöst werden.

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

Die body Stellvertretung wird einmal für jedes Element in der source Enumeration aufgerufen. Es wird mit den folgenden Parametern bereitgestellt: dem aktuellen Element, einer ParallelLoopState Instanz, die zum vorzeitigen Ausbrechen der Schleife verwendet werden kann, und einige lokale Zustände, die unter Iterationen gemeinsam verwendet werden können, die im selben Thread ausgeführt werden.

Der localInit Delegat wird einmal für jede Aufgabe aufgerufen, die an der Ausführung der Schleife teilnimmt, und gibt den ursprünglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body Aufrufe für jeden Vorgang übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textkörperaufruf ü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 endgültige Aktion für den lokalen Zustand jeder Aufgabe auszuführen. Diese Stellvertretung kann gleichzeitig für mehrere Aufgaben aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.

Die Parallel.ForEach Methode kann mehr Aufgaben als Threads über die Lebensdauer der Ausführung verwenden, da vorhandene Aufgaben abgeschlossen sind 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 verwenden.

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
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach -Vorgang (For Each in Visual Basic) mit threadlokalen Daten in einem IEnumerable aus, in dem Iterationen parallel ausgeführt werden können und der Zustand der Schleife überwacht und bearbeitet werden kann.

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 aufzählbare Datenquelle.

localInit
Func<TLocal>

Der Funktionsdelegat, der den Anfangszustand der lokalen Daten für jede Aufgabe zurückgibt.

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

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

localFinally
Action<TLocal>

Der Delegat, der eine endgültige Aktion für den lokalen Zustand jeder Aufgabe ausführt.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das source Argument ist null.

- oder -

Das body Argument ist null.

- oder -

Das localInit Argument ist null.

- oder -

Das localFinally Argument ist null.

Die Ausnahme, die alle einzelnen Ausnahmen enthält, die in allen Threads ausgelöst werden.

Hinweise

Die body Stellvertretung wird einmal für jedes Element in der source Enumeration aufgerufen. Es wird mit den folgenden Parametern bereitgestellt: dem aktuellen Element, einer ParallelLoopState Instanz, die verwendet werden kann, um vorzeitig aus der Schleife zu brechen, den Index (Int64) des aktuellen Elements und einen lokalen Zustand, der unter 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 teilnimmt, und gibt den ursprünglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body Aufrufe für jeden Vorgang übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textkörperaufruf ü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 endgültige Aktion für den lokalen Zustand der einzelnen Aufgaben auszuführen. Diese Stellvertretung kann gleichzeitig für mehrere Aufgaben aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.

Die Parallel.ForEach Methode kann mehr Aufgaben als Threads über die Lebensdauer der Ausführung verwenden, da vorhandene Aufgaben abgeschlossen sind 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 verwenden.

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
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach (For Each in Visual Basic) mit threadlokalen Daten in einem Partitioner aus, in dem Iterationen parallel ausgeführt werden können 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::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>

Die Partitionierung, die die ursprüngliche Datenquelle enthält.

localInit
Func<TLocal>

Der Funktionsdelegat, der den Anfangszustand der lokalen Daten für jede Aufgabe zurückgibt.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

localFinally
Action<TLocal>

Der Delegat, der eine endgültige Aktion für den lokalen Zustand jeder Aufgabe ausführt.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das source Argument ist null.

- oder -

Das body Argument ist null.

- oder -

Das localInit Argument ist null.

- oder -

Das localFinally Argument ist null.

Die SupportsDynamicPartitions Eigenschaft in der sourcePartitionerfalse Rückgabe oder der Partitioner gibt Partitionen zurück.null

Die Ausnahme, die alle einzelnen Ausnahmen enthält, die in allen Threads ausgelöst werden.

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 die dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionen für PLINQ und TPL und How to: Implement Dynamic Partitions.

Der localInit Delegat wird einmal für jeden Thread aufgerufen, der an der Ausführung der Schleife teilnimmt, und gibt den ursprünglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body Aufrufe für jeden Vorgang übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textkörperaufruf ü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 endgültige Aktion für den lokalen Zustand der einzelnen Aufgaben auszuführen. Diese Stellvertretung kann gleichzeitig für mehrere Aufgaben aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.

Die Parallel.ForEach Methode kann mehr Aufgaben als Threads über die Lebensdauer der Ausführung verwenden, da vorhandene Aufgaben abgeschlossen sind 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 verwenden.

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
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach -Vorgang (For Each in Visual Basic) mit threadlokalen Daten in einem OrderablePartitioner<TSource> aus, in dem Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet 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

source
OrderablePartitioner<TSource>

Der geordnete Partitionierer, der die ursprüngliche Datenquelle enthält.

localInit
Func<TLocal>

Der Funktionsdelegat, der den Anfangszustand der lokalen Daten für jede Aufgabe zurückgibt.

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

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

localFinally
Action<TLocal>

Der Delegat, der eine endgültige Aktion für den lokalen Zustand jeder Aufgabe ausführt.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das source Argument ist null.

- oder -

Das body Argument ist null.

- oder -

Das localInit Argument ist null.

- oder -

Das localFinally Argument ist null.

Die SupportsDynamicPartitions Eigenschaft in der sourcePartitionerfalse Rückgabe oder der Partitioner gibt Partitionen zurück.null

Die Ausnahme, die alle einzelnen Ausnahmen enthält, die in allen Threads ausgelöst werden.

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 die dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionen für PLINQ und TPL und How to: Implement Dynamic Partitions.

Der localInit Delegat wird einmal für jede Aufgabe aufgerufen, die an der Ausführung der Schleife teilnimmt, und gibt den ursprünglichen lokalen Zustand für jede dieser Aufgaben zurück. Diese Anfangszustände werden an die ersten body Aufrufe für jeden Vorgang übergeben. Anschließend gibt jeder nachfolgende Textkörperaufruf einen möglicherweise geänderten Zustandswert zurück, der an den nächsten Textkörperaufruf ü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 endgültige Aktion für den lokalen Zustand der einzelnen Aufgaben auszuführen. Diese Stellvertretung kann gleichzeitig für mehrere Aufgaben aufgerufen werden. Daher müssen Sie den Zugriff auf alle freigegebenen Variablen synchronisieren.

Die Parallel.ForEach Methode kann mehr Aufgaben als Threads über die Lebensdauer der Ausführung verwenden, da vorhandene Aufgaben abgeschlossen sind 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 verwenden.

Gilt für:

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

Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach -Vorgang (For Each in Visual Basic) für einen IEnumerable aus, in dem Iterationen in Parallel- und Schleifenoptionen ausgeführt werden können.

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 aufzählbare Datenquelle.

parallelOptions
ParallelOptions

Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.

body
Action<TSource>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das CancellationToken Argument parallelOptions wird abgebrochen.

Das source Argument ist null.

- oder -

Das parallelOptions Argument ist null.

- oder -

Das body Argument ist null.

Die Ausnahme, die alle einzelnen Ausnahmen enthält, die in allen Threads ausgelöst werden.

Das CancellationTokenSource zugeordnete In wurde CancellationTokenparallelOptions gelöscht.

Hinweise

Die body Stellvertretung wird einmal für jedes Element in der source Enumeration aufgerufen. Es wird mit dem aktuellen Element als Parameter bereitgestellt.

Gilt für:

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

Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach -Vorgang (For Each in Visual Basic) für eine IEnumerable aus, in der Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet 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 aufzählbare Datenquelle.

parallelOptions
ParallelOptions

Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.

body
Action<TSource,ParallelLoopState>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das CancellationToken Argument parallelOptions wird abgebrochen.

Das source Argument ist null.

- oder -

Das parallelOptions Argument ist null.

- oder -

Das body Argument ist null.

Die Ausnahme, die alle einzelnen Ausnahmen enthält, die in allen Threads ausgelöst werden.

Das CancellationTokenSource zugeordnete In wurde CancellationTokenparallelOptions gelöscht.

Hinweise

Die body Stellvertretung wird einmal für jedes Element in der source Enumeration aufgerufen. Es wird mit den folgenden Parametern bereitgestellt: dem aktuellen Element und einer ParallelLoopState Instanz, die verwendet werden kann, um vorzeitig aus der Schleife herauszubrechen.

Gilt für:

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

Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach -Vorgang (For Each in Visual Basic) für einen OrderablePartitioner<TSource> aus, in dem Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet 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

source
OrderablePartitioner<TSource>

Der geordnete Partitionierer, der die ursprüngliche Datenquelle enthält.

parallelOptions
ParallelOptions

Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.

body
Action<TSource,ParallelLoopState,Int64>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das CancellationToken Argument parallelOptions wird abgebrochen.

Das source Argument ist null.

- oder -

Das parallelOptions Argument ist null.

- oder -

Das body Argument ist null.

Das CancellationTokenSource zugeordnete In wurde CancellationTokenparallelOptions gelöscht.

Die SupportsDynamicPartitions Eigenschaft in der source geordneten Partitionierung gibt falsezurück.

- oder -

Die KeysNormalized Eigenschaft in der source geordneten Partitionierung gibt falsezurück.

- oder -

Die Ausnahme, die ausgelöst wird, wenn methoden in der source geordneten Partitionierung zurückgegeben nullwerden.

Die Ausnahme, die ausgelöst wird, um eine Ausnahme zu enthalten, die von einem der angegebenen Stellvertretungen ausgelöst wird.

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 die dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionen für PLINQ und TPL und How to: Implement Dynamic Partitions.

Gilt für:

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

Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach -Vorgang (For Each in Visual Basic) für einen Partitioner aus, in dem Iterationen in Parallel- und Schleifenoptionen ausgeführt werden können.

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>

Die Partitionierung, die die ursprüngliche Datenquelle enthält.

parallelOptions
ParallelOptions

Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.

body
Action<TSource>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das CancellationToken Argument parallelOptions wird abgebrochen.

Das CancellationTokenSource zugeordnete In wurde CancellationTokenparallelOptions gelöscht.

Das source Argument ist null.

- oder -

Das parallelOptions Argument ist null.

- oder -

Das body Argument ist null.

Die SupportsDynamicPartitions Eigenschaft in der source Partitionierung gibt zurück false.

- oder -

Die Ausnahme, die ausgelöst wird, wenn methoden in der source Partitioner zurückgegeben nullwerden.

Die Ausnahme, die ausgelöst wird, um eine Ausnahme zu enthalten, die von einem der angegebenen Stellvertretungen ausgelöst wird.

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 die dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionen für PLINQ und TPL und How to: Implement Dynamic Partitions.

Gilt für:

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

Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach (For Each in Visual Basic) -Vorgang mit 64-Bit-Indizes für eine IEnumerable aus, in der Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet 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 aufzählbare Datenquelle.

parallelOptions
ParallelOptions

Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.

body
Action<TSource,ParallelLoopState,Int64>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das CancellationToken Argument parallelOptions wird abgebrochen.

Das source Argument ist null.

- oder -

Das parallelOptions Argument ist null.

- oder -

Das body Argument ist null.

Die Ausnahme, die alle einzelnen Ausnahmen enthält, die in allen Threads ausgelöst werden.

Das CancellationTokenSource zugeordnete In wurde CancellationTokenparallelOptions gelöscht.

Hinweise

Die body Stellvertretung wird einmal für jedes Element in der source Enumeration aufgerufen. Es wird mit den folgenden Parametern bereitgestellt: dem aktuellen Element, einer ParallelLoopState Instanz, die verwendet werden kann, um vorzeitig aus der Schleife zu brechen, und dem Index des aktuellen Elements (Int64).

Gilt für:

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

Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach (For Each in Visual Basic) für einen Partitioner aus, in dem Iterationen parallel ausgeführt werden können, und der Zustand der Schleife kann überwacht und bearbeitet 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>

Die Partitionierung, die die ursprüngliche Datenquelle enthält.

body
Action<TSource,ParallelLoopState>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das source Argument ist null.

- oder -

Das body Argument ist null.

Die SupportsDynamicPartitions Eigenschaft in der source Partitionierung gibt zurück false.

- oder -

Eine Methode in der source Partitioner gibt nullzurück.

- oder -

Die GetPartitions(Int32) Methode in der source Partitionierung gibt nicht die richtige Anzahl von Partitionen zurück.

Die Ausnahme, die ausgelöst wird, um eine Ausnahme zu enthalten, die von einem der angegebenen Stellvertretungen ausgelöst wird.

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 die dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionen für PLINQ und TPL und How to: Implement Dynamic Partitions.

Gilt für:

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

Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach -Vorgang (For Each in Visual Basic) für einen Partitioner 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>

Die Partitionierung, die die ursprüngliche Datenquelle enthält.

body
Action<TSource>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das source Argument ist null.

- oder -

Das body Argument ist null.

Die SupportsDynamicPartitions Eigenschaft in der source Partitionierung gibt zurück false.

- oder -

Die Ausnahme, die ausgelöst wird, wenn methoden in der source Partitioner zurückgegeben nullwerden.

- oder -

Die GetPartitions(Int32) Methode in der source Partitionierung gibt nicht die richtige Anzahl von Partitionen zurück.

Die Ausnahme, die ausgelöst wird, um eine Ausnahme zu enthalten, die von einem der angegebenen Stellvertretungen ausgelöst wird.

Beispiele

Das folgende Beispiel zeigt, wie Sie eine Bereichspartitionierung für die Verwendung mit 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

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 die dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionen für PLINQ und TPL und How to: Implement Dynamic Partitions.

Gilt für:

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

Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach (For Each in Visual Basic) mit 64-Bit-Indizes für eine IEnumerable aus, in der Iterationen parallel ausgeführt werden können, und der Zustand der Schleife kann überwacht und bearbeitet 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 aufzählbare Datenquelle.

body
Action<TSource,ParallelLoopState,Int64>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das source Argument ist null.

- oder -

Das body Argument ist null.

Die Ausnahme, die alle einzelnen Ausnahmen enthält, die in allen Threads ausgelöst werden.

Hinweise

Die body Stellvertretung wird einmal für jedes Element in der source Enumeration aufgerufen. Es wird mit den folgenden Parametern bereitgestellt: dem aktuellen Element, einer ParallelLoopState Instanz, die verwendet werden kann, um vorzeitig aus der Schleife zu brechen, und dem Index des aktuellen Elements (Int64).

Gilt für:

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

Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach -Vorgang (For Each in Visual Basic) für einen OrderablePartitioner<TSource> aus, in dem Iterationen parallel ausgeführt werden können und der Zustand der Schleife überwacht und bearbeitet werden kann.

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

source
OrderablePartitioner<TSource>

Der geordnete Partitionierer, der die ursprüngliche Datenquelle enthält.

body
Action<TSource,ParallelLoopState,Int64>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das source Argument ist null.

- oder -

Das body Argument ist null.

Die SupportsDynamicPartitions Eigenschaft in der source geordneten Partitionierung gibt falsezurück.

- oder -

Die KeysNormalized Eigenschaft in der quellreihenfolgefähigen Partitionierung gibt zurück false.

- oder -

Any methods in the source orderable partitioner return null.

Die Ausnahme, die von einem der angegebenen Stellvertretungen ausgelöst wird.

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 die dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionen für PLINQ und TPL und How to: Implement Dynamic Partitions.

Gilt für:

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

Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach -Vorgang (For Each in Visual Basic) für einen IEnumerable aus, in dem Iterationen parallel ausgeführt werden können.

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 aufzählbare Datenquelle.

body
Action<TSource>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das source Argument ist null.

- oder -

Das body Argument ist null.

Die Ausnahme, die alle einzelnen Ausnahmen enthält, die in allen Threads ausgelöst werden.

Beispiele

Im folgenden Beispiel wird die ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) Methode verwendet, um die Anzahl der Vokale 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 Inkrementieren der Zählervariablen ein atomer Vorgang ist und dass mehrere Threads nicht 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

Die body Stellvertretung wird einmal für jedes Element in der source Enumeration aufgerufen. Es wird mit dem aktuellen Element als Parameter bereitgestellt.

Gilt für:

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

Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach -Vorgang (For Each in Visual Basic) für einen Partitioner aus, in dem Iterationen parallel ausgeführt werden können, Schleifenoptionen konfiguriert werden können, und der Zustand der Schleife kann überwacht und bearbeitet 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>

Die Partitionierung, die die ursprüngliche Datenquelle enthält.

parallelOptions
ParallelOptions

Ein Objekt, das das Verhalten dieses Vorgangs konfiguriert.

body
Action<TSource,ParallelLoopState>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das CancellationToken Argument parallelOptions wird abgebrochen.

Das CancellationTokenSource zugeordnete In wurde CancellationTokenparallelOptions gelöscht.

Das source Argument ist null.

- oder -

Das parallelOptions Argument ist null.

- oder -

Das body Argument ist null.

Die SupportsDynamicPartitions Eigenschaft in der source Partitionierung gibt zurück false.

- oder -

Die Ausnahme, die ausgelöst wird, wenn methoden in der source Partitioner zurückgegeben nullwerden.

Die Ausnahme, die ausgelöst wird, um eine Ausnahme zu enthalten, die von einem der angegebenen Stellvertretungen ausgelöst wird.

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 die dynamische Partitionierung unterstützen. Weitere Informationen finden Sie unter Benutzerdefinierte Partitionen für PLINQ und TPL und How to: Implement Dynamic Partitions.

Gilt für:

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

Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs
Quelle:
Parallel.cs

Führt einen foreach (For Each in Visual Basic) Vorgang für eine IEnumerable aus, in der Iterationen parallel ausgeführt werden können, und der Zustand der Schleife kann überwacht und bearbeitet 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 aufzählbare Datenquelle.

body
Action<TSource,ParallelLoopState>

Die Stellvertretung, die einmal pro Iteration aufgerufen wird.

Gibt zurück

Eine Struktur, die Informationen darüber enthält, welcher Teil der Schleife abgeschlossen wurde.

Ausnahmen

Das source Argument ist null.

- oder -

Das body Argument ist null.

Die Ausnahme, die alle einzelnen Ausnahmen enthält, die in allen Threads ausgelöst werden.

Hinweise

Die body Stellvertretung wird einmal für jedes Element in der source Enumeration aufgerufen. Es wird mit den folgenden Parametern bereitgestellt: dem aktuellen Element und einer ParallelLoopState Instanz, die verwendet werden kann, um vorzeitig aus der Schleife herauszubrechen.

Gilt für: