Parallel.ForEach メソッド

定義

イテレーションが並列で実行される可能性のある foreach (Visual Basic の場合は For Each ) 操作を実行します。

オーバーロード

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

IEnumerable に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる、スレッド ローカル データを持つ foreach (Visual Basic の場合は For Each) 操作を実行します。

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

IEnumerable に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる、スレッド ローカル データと 64 ビットのインデックスを持つ foreach (Visual Basic の場合は For Each) 操作を実行します。

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

foreach に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる、スレッド ローカル データを持つ For Each (Visual Basic の場合は Partitioner) 操作を実行します。

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

foreach 64 ビット インデックスとスレッド ローカル データOrderablePartitioner<TSource>を使用して (For Each Visual Basic では) 操作を実行します。この操作では、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できます。

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

foreach に対して、イテレーションが並列で実行される可能性があり、ループの状態を監視および操作できる、スレッド ローカル データを持つ For Each (Visual Basic の場合は IEnumerable) 操作を実行します。

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

foreach に対して、イテレーションが並列で実行される可能性があり、ループの状態を監視および操作できる、スレッド ローカル データを持つ For Each (Visual Basic の場合は IEnumerable) 操作を実行します。

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

foreach に対して、イテレーションが並列で実行される可能性があり、ループの状態を監視および操作できる、スレッド ローカル データを持つ For Each (Visual Basic の場合は Partitioner) 操作を実行します。

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

foreach に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる、スレッド ローカル データを持つ For Each (Visual Basic の場合は OrderablePartitioner<TSource>) 操作を実行します。

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

IEnumerable に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成できる foreach (Visual Basic の場合は For Each) 操作を実行します。

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

foreach に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる For Each (Visual Basic の場合は IEnumerable) 操作を実行します。

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

foreach に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる For Each (Visual Basic の場合は OrderablePartitioner<TSource>) 操作を実行します。

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

Partitioner に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成できる foreach (Visual Basic の場合は For Each) 操作を実行します。

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

foreach に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる、64 ビットのインデックスを持つ For Each (Visual Basic の場合は IEnumerable) 操作を実行します。

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

Partitioner に対して、イテレーションが並列で実行される可能性があり、ループの状態を監視および操作できる foreach (Visual Basic の場合は For Each) 操作を実行します。

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

foreach に対して、イテレーションが並列で実行される可能性のある For Each (Visual Basic の場合は Partitioner) 操作を実行します。

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

IEnumerable に対して、イテレーションが並列で実行される可能性があり、ループの状態を監視および操作できる、64 ビットのインデックスを持つ foreach (Visual Basic の場合は For Each) 操作を実行します。

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

foreach に対して、イテレーションが並列で実行される可能性があり、ループの状態を監視および操作できる For Each (Visual Basic の場合は OrderablePartitioner<TSource>) 操作を実行します。

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

foreach に対して、イテレーションが並列で実行される可能性のある For Each (Visual Basic の場合は IEnumerable) 操作を実行します。

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

foreach に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる For Each (Visual Basic の場合は Partitioner) 操作を実行します。

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

foreach に対して、イテレーションが並列で実行される可能性があり、ループの状態を監視および操作できる For Each (Visual Basic の場合は IEnumerable) 操作を実行します。

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

IEnumerable に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる、スレッド ローカル データを持つ foreach (Visual Basic の場合は For Each) 操作を実行します。

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

型パラメーター

TSource

ソース内のデータの型。

TLocal

スレッド ローカル データの型。

パラメーター

source
IEnumerable<TSource>

列挙可能なデータ ソース。

parallelOptions
ParallelOptions

この操作の動作を構成するオブジェクト。

localInit
Func<TLocal>

各タスクのローカル データの初期状態を返す関数デリゲート。

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

localFinally
Action<TLocal>

各タスクのローカル状態に対して最後の操作を行うデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

source 引数が null です。

- または -

parallelOptions 引数が null です。

- または -

body 引数が null です。

- または -

localInit 引数が null です。

- または -

localFinally 引数が null です。

parallelOptions 引数の CancellationToken が取り消されました。

parallelOptions 内の CancellationTokenSource に関連付けられている CancellationToken は破棄されました。

すべてのスレッドでスローされたすべての個別の例外を含む例外。

注釈

デリゲートは body 、列挙可能な 内の各要素に対して source 1 回呼び出されます。 現在の要素、ループの途中から抜け出すために使用できるインスタンス、 ParallelLoopState および同じスレッドで実行されるイテレーション間で共有されるローカル状態のパラメーターが用意されています。

デリゲートは localInit 、ループの実行に参加するタスクごとに 1 回呼び出され、それらの各タスクの初期ローカル状態を返します。 これらの初期状態は、各タスクの最初 body の呼び出しに渡されます。 次に、後続のすべての本文呼び出しで、次の本文呼び出しに渡される変更された可能性のある状態値が返されます。 最後に、各タスクの最後の本文呼び出しは、デリゲートに渡される状態値を localFinally 返します。 デリゲートは localFinally 、各タスクのローカル状態に対して最終的なアクションを実行するために、スレッドごとに 1 回呼び出されます。 このデリゲートは、複数のタスクで同時に呼び出される場合があります。そのため、すべての共有変数へのアクセスを同期する必要があります。

メソッドは Parallel.ForEach 、既存のタスクが完了し、新しいタスクに置き換えられるので、実行の有効期間中にスレッドよりも多くのタスクを使用する場合があります。 これにより、基になる TaskScheduler オブジェクトは、ループを処理するスレッドを追加、変更、または削除できます。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

IEnumerable に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる、スレッド ローカル データと 64 ビットのインデックスを持つ foreach (Visual Basic の場合は For Each) 操作を実行します。

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

型パラメーター

TSource

ソース内のデータの型。

TLocal

スレッド ローカル データの型。

パラメーター

source
IEnumerable<TSource>

列挙可能なデータ ソース。

parallelOptions
ParallelOptions

この操作の動作を構成するオブジェクト。

localInit
Func<TLocal>

各タスクのローカル データの初期状態を返す関数デリゲート。

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

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

localFinally
Action<TLocal>

各タスクのローカル状態に対して最後の操作を行うデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

source 引数が null です。

- または -

parallelOptions 引数が null です。

- または -

body 引数が null です。

- または -

localInit 引数が null です。

- または -

localFinally 引数が null です。

parallelOptions 引数の CancellationToken が取り消されました。

parallelOptions 内の CancellationTokenSource に関連付けられている CancellationToken は破棄されました。

すべてのスレッドでスローされたすべての個別の例外を含む例外。

注釈

デリゲートは body 、列挙可能な 内の各要素に対して source 1 回呼び出されます。 現在の要素、ループの途中から抜け出すために使用できるインスタンス、 ParallelLoopState 現在の要素のインデックス (Int64)、同じスレッドで実行されるイテレーション間で共有されるローカル状態など、次のパラメーターが用意されています。

デリゲートは localInit 、ループの実行に参加するタスクごとに 1 回呼び出され、それらの各タスクの初期ローカル状態を返します。 これらの初期状態は、各タスクの最初 body の呼び出しに渡されます。 次に、後続のすべての本文呼び出しで、次の本文呼び出しに渡される変更された可能性のある状態値が返されます。 最後に、各タスクの最後の本文呼び出しは、デリゲートに渡される状態値を localFinally 返します。 デリゲートは localFinally 、各タスクのローカル状態に対して最終的なアクションを実行するために、スレッドごとに 1 回呼び出されます。 このデリゲートは、複数のタスクで同時に呼び出される場合があります。そのため、すべての共有変数へのアクセスを同期する必要があります。

メソッドは Parallel.ForEach 、既存のタスクが完了し、新しいタスクに置き換えられるので、実行の有効期間中にスレッドよりも多くのタスクを使用する場合があります。 これにより、基になる TaskScheduler オブジェクトは、ループを処理するスレッドを追加、変更、または削除できます。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

foreach に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる、スレッド ローカル データを持つ For Each (Visual Basic の場合は Partitioner) 操作を実行します。

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

型パラメーター

TSource

source の要素の型。

TLocal

スレッド ローカル データの型。

パラメーター

source
Partitioner<TSource>

元のデータ ソースを格納しているパーティショナー。

parallelOptions
ParallelOptions

この操作の動作を構成するオブジェクト。

localInit
Func<TLocal>

各タスクのローカル データの初期状態を返す関数デリゲート。

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

localFinally
Action<TLocal>

各タスクのローカル状態に対して最後の操作を行うデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

source 引数が null です。

- または -

parallelOptions 引数が null です。

- または -

body 引数が null です。

- または -

localInit 引数が null です。

- または -

localFinally 引数が null です。

sourceSupportsDynamicPartitionsPartitioner プロパティは false を返します。またはパーティショナーは null パーティションを返します。

すべてのスレッドでスローされたすべての個別の例外を含む例外。

parallelOptions 引数の CancellationToken が取り消されました。

parallelOptions 内の CancellationTokenSource に関連付けられている CancellationToken は破棄されました。

注釈

このオーバーロードは、既定のパーティション構成をオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体は、範囲をパーティション分割する利点があります。 メソッドは ForEach 、カスタム パーティショナーが動的パーティション分割をサポートすることを想定しています。 このオーバーロードは、静的範囲のパーティション分割の恩恵を受ける可能性がある小さなループ本体を持つシナリオに対して提供されます。 パーティショナーは動的パーティションをサポートする必要があります。 詳細については、「 PLINQ と TPL のカスタム パーティショナー 」および 「方法: 動的パーティションを実装する」を参照してください。

デリゲートは localInit 、ループの実行に参加するタスクごとに 1 回呼び出され、それらの各タスクの初期ローカル状態を返します。 これらの初期状態は、各タスクの最初 body の呼び出しに渡されます。 次に、後続のすべての本文呼び出しで、次の本文呼び出しに渡される変更された可能性のある状態値が返されます。 最後に、各タスクの最後の本文呼び出しは、デリゲートに渡される状態値を localFinally 返します。 デリゲートは localFinally 、各タスクのローカル状態に対して最終的なアクションを実行するために、タスクごとに 1 回呼び出されます。 このデリゲートは、複数のタスクで同時に呼び出される場合があります。そのため、すべての共有変数へのアクセスを同期する必要があります。

メソッドは Parallel.ForEach 、既存のタスクが完了し、新しいタスクに置き換えられるので、実行の有効期間中にスレッドよりも多くのタスクを使用する場合があります。 これにより、基になる TaskScheduler オブジェクトは、ループを処理するスレッドを追加、変更、または削除できます。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

foreach 64 ビット インデックスとスレッド ローカル データOrderablePartitioner<TSource>を使用して (For Each Visual Basic では) 操作を実行します。この操作では、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できます。

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

型パラメーター

TSource

source の要素の型。

TLocal

スレッド ローカル データの型。

パラメーター

source
OrderablePartitioner<TSource>

元のデータ ソースを格納している順序付け可能なパーティショナー。

parallelOptions
ParallelOptions

この操作の動作を構成するオブジェクト。

localInit
Func<TLocal>

各タスクのローカル データの初期状態を返す関数デリゲート。

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

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

localFinally
Action<TLocal>

各タスクのローカル状態に対して最後の操作を行うデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

source 引数が null です。

- または -

parallelOptions 引数が null です。

- または -

body 引数が null です。

- または -

localInit または localFinally 引数が null です。

sourceSupportsDynamicPartitionsPartitioner プロパティは false を返します。またはパーティショナーは null パーティションを返します。

すべてのスレッドでスローされたすべての個別の例外を含む例外。

parallelOptions 引数の CancellationToken が取り消されました。

parallelOptions 内の CancellationTokenSource に関連付けられている CancellationToken は破棄されました。

注釈

このオーバーロードは、既定のパーティション構成をオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体は、範囲をパーティション分割する利点があります。 メソッドは ForEach 、カスタム パーティショナーが動的パーティション分割をサポートすることを想定しています。 詳細については、「 PLINQ と TPL のカスタム パーティショナー 」および 「方法: 動的パーティションを実装する」を参照してください。

デリゲートは localInit 、ループの実行に参加するタスクごとに 1 回呼び出され、それらの各タスクの初期ローカル状態を返します。 これらの初期状態は、各タスクの最初 body の呼び出しに渡されます。 次に、後続のすべての本文呼び出しで、次の本文呼び出しに渡される変更された可能性のある状態値が返されます。 最後に、各スレッドの最後の本文呼び出しは、デリゲートに渡される状態値を localFinally 返します。 デリゲートは localFinally 、各タスクのローカル状態に対して最終的なアクションを実行するために、タスクごとに 1 回呼び出されます。 このデリゲートは、複数のタスクで同時に呼び出される場合があります。そのため、すべての共有変数へのアクセスを同期する必要があります。

メソッドは Parallel.ForEach 、既存のタスクが完了し、新しいタスクに置き換えられるので、実行の有効期間中にスレッドよりも多くのタスクを使用する場合があります。 これにより、基になる TaskScheduler オブジェクトは、ループを処理するスレッドを追加、変更、または削除できます。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

foreach に対して、イテレーションが並列で実行される可能性があり、ループの状態を監視および操作できる、スレッド ローカル データを持つ For Each (Visual Basic の場合は IEnumerable) 操作を実行します。

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

型パラメーター

TSource

ソース内のデータの型。

TLocal

スレッド ローカル データの型。

パラメーター

source
IEnumerable<TSource>

列挙可能なデータ ソース。

localInit
Func<TLocal>

各タスクのローカル データの初期状態を返す関数デリゲート。

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

localFinally
Action<TLocal>

各タスクのローカル状態に対して最後の操作を行うデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

source 引数が null です。

- または -

body 引数が null です。

- または -

localInit 引数が null です。

- または -

localFinally 引数が null です。

すべてのスレッドでスローされたすべての個別の例外を含む例外。

次の例は、ローカル状態のメソッドを ForEach 使用する方法を示しています。

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

注釈

デリゲートは body 、列挙可能な 内の各要素に対して source 1 回呼び出されます。 現在の要素、ループの途中から抜け出すために使用できるインスタンス、 ParallelLoopState および同じスレッドで実行されるイテレーション間で共有されるローカル状態のパラメーターが用意されています。

デリゲートは localInit 、ループの実行に参加するタスクごとに 1 回呼び出され、それらの各タスクの初期ローカル状態を返します。 これらの初期状態は、各タスクの最初 body の呼び出しに渡されます。 次に、後続のすべての本文呼び出しで、次の本文呼び出しに渡される変更された可能性のある状態値が返されます。 最後に、各タスクの最後の本文呼び出しは、デリゲートに渡される状態値を localFinally 返します。 デリゲートは localFinally 、各タスクのローカル状態に対して最終的なアクションを実行するために、スレッドごとに 1 回呼び出されます。 このデリゲートは、複数のタスクで同時に呼び出される場合があります。そのため、すべての共有変数へのアクセスを同期する必要があります。

メソッドは Parallel.ForEach 、既存のタスクが完了し、新しいタスクに置き換えられるので、実行の有効期間中にスレッドよりも多くのタスクを使用する場合があります。 これにより、基になる TaskScheduler オブジェクトは、ループを処理するスレッドを追加、変更、または削除できます。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

foreach に対して、イテレーションが並列で実行される可能性があり、ループの状態を監視および操作できる、スレッド ローカル データを持つ For Each (Visual Basic の場合は IEnumerable) 操作を実行します。

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

型パラメーター

TSource

ソース内のデータの型。

TLocal

スレッド ローカル データの型。

パラメーター

source
IEnumerable<TSource>

列挙可能なデータ ソース。

localInit
Func<TLocal>

各タスクのローカル データの初期状態を返す関数デリゲート。

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

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

localFinally
Action<TLocal>

各タスクのローカル状態に対して最後の操作を行うデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

source 引数が null です。

- または -

body 引数が null です。

- または -

localInit 引数が null です。

- または -

localFinally 引数が null です。

すべてのスレッドでスローされたすべての個別の例外を含む例外。

注釈

デリゲートは body 、列挙可能な 内の各要素に対して source 1 回呼び出されます。 現在の要素、ループの途中から抜け出すために使用できるインスタンス、 ParallelLoopState 現在の要素のインデックス (Int64)、同じスレッドで実行されるイテレーション間で共有されるローカル状態など、次のパラメーターが用意されています。

デリゲートは localInit 、ループの実行に参加するタスクごとに 1 回呼び出され、それらの各タスクの初期ローカル状態を返します。 これらの初期状態は、各タスクの最初 body の呼び出しに渡されます。 次に、後続のすべての本文呼び出しで、次の本文呼び出しに渡される変更された可能性のある状態値が返されます。 最後に、各タスクの最後の本文呼び出しは、デリゲートに渡される状態値を localFinally 返します。 デリゲートは localFinally 、各タスクのローカル状態に対して最終的なアクションを実行するために、タスクごとに 1 回呼び出されます。 このデリゲートは、複数のタスクで同時に呼び出される場合があります。そのため、すべての共有変数へのアクセスを同期する必要があります。

メソッドは Parallel.ForEach 、既存のタスクが完了し、新しいタスクに置き換えられるので、実行の有効期間中にスレッドよりも多くのタスクを使用する場合があります。 これにより、基になる TaskScheduler オブジェクトは、ループを処理するスレッドを追加、変更、または削除できます。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

foreach に対して、イテレーションが並列で実行される可能性があり、ループの状態を監視および操作できる、スレッド ローカル データを持つ For Each (Visual Basic の場合は Partitioner) 操作を実行します。

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

型パラメーター

TSource

source の要素の型。

TLocal

スレッド ローカル データの型。

パラメーター

source
Partitioner<TSource>

元のデータ ソースを格納しているパーティショナー。

localInit
Func<TLocal>

各タスクのローカル データの初期状態を返す関数デリゲート。

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

localFinally
Action<TLocal>

各タスクのローカル状態に対して最後の操作を行うデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

source 引数が null です。

- または -

body 引数が null です。

- または -

localInit 引数が null です。

- または -

localFinally 引数が null です。

sourceSupportsDynamicPartitionsPartitioner プロパティは false を返します。またはパーティショナーは null パーティションを返します。

すべてのスレッドでスローされたすべての個別の例外を含む例外。

注釈

このオーバーロードは、既定のパーティション構成をオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体は、範囲をパーティション分割する利点があります。 メソッドは ForEach 、カスタム パーティショナーが動的パーティション分割をサポートすることを想定しています。 詳細については、「 PLINQ と TPL のカスタム パーティショナー 」および 「方法: 動的パーティションを実装する」を参照してください。

デリゲートは localInit 、ループの実行に参加するスレッドごとに 1 回呼び出され、それらの各タスクの初期ローカル状態を返します。 これらの初期状態は、各タスクの最初 body の呼び出しに渡されます。 次に、後続のすべての本文呼び出しで、次の本文呼び出しに渡される変更された可能性のある状態値が返されます。 最後に、各タスクの最後の本文呼び出しは、デリゲートに渡される状態値を localFinally 返します。 デリゲートは localFinally 、各タスクのローカル状態に対して最終的なアクションを実行するために、タスクごとに 1 回呼び出されます。 このデリゲートは、複数のタスクで同時に呼び出される場合があります。そのため、すべての共有変数へのアクセスを同期する必要があります。

メソッドは Parallel.ForEach 、既存のタスクが完了し、新しいタスクに置き換えられるので、実行の有効期間中にスレッドよりも多くのタスクを使用する場合があります。 これにより、基になる TaskScheduler オブジェクトは、ループを処理するスレッドを追加、変更、または削除できます。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

foreach に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる、スレッド ローカル データを持つ For Each (Visual Basic の場合は OrderablePartitioner<TSource>) 操作を実行します。

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

型パラメーター

TSource

source の要素の型。

TLocal

スレッド ローカル データの型。

パラメーター

source
OrderablePartitioner<TSource>

元のデータ ソースを格納している順序付け可能なパーティショナー。

localInit
Func<TLocal>

各タスクのローカル データの初期状態を返す関数デリゲート。

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

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

localFinally
Action<TLocal>

各タスクのローカル状態に対して最後の操作を行うデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

source 引数が null です。

- または -

body 引数が null です。

- または -

localInit 引数が null です。

- または -

localFinally 引数が null です。

sourceSupportsDynamicPartitionsPartitioner プロパティは false を返します。またはパーティショナーは null パーティションを返します。

すべてのスレッドでスローされたすべての個別の例外を含む例外。

注釈

このオーバーロードは、既定のパーティション構成をオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体は、範囲をパーティション分割する利点があります。 メソッドは ForEach 、カスタム パーティショナーが動的パーティション分割をサポートすることを想定しています。 詳細については、「 PLINQ と TPL のカスタム パーティショナー 」および 「方法: 動的パーティションを実装する」を参照してください。

デリゲートは localInit 、ループの実行に参加するタスクごとに 1 回呼び出され、それらの各タスクの初期ローカル状態を返します。 これらの初期状態は、各タスクの最初 body の呼び出しに渡されます。 次に、後続のすべての本文呼び出しで、次の本文呼び出しに渡される変更された可能性のある状態値が返されます。 最後に、各タスクの最後の本文呼び出しは、デリゲートに渡される状態値を localFinally 返します。 デリゲートは localFinally 、各タスクのローカル状態に対して最終的なアクションを実行するために、タスクごとに 1 回呼び出されます。 このデリゲートは、複数のタスクで同時に呼び出される場合があります。そのため、すべての共有変数へのアクセスを同期する必要があります。

メソッドは Parallel.ForEach 、既存のタスクが完了し、新しいタスクに置き換えられるので、実行の有効期間中にスレッドよりも多くのタスクを使用する場合があります。 これにより、基になる TaskScheduler オブジェクトは、ループを処理するスレッドを追加、変更、または削除できます。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

IEnumerable に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成できる foreach (Visual Basic の場合は For Each) 操作を実行します。

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

型パラメーター

TSource

ソース内のデータの型。

パラメーター

source
IEnumerable<TSource>

列挙可能なデータ ソース。

parallelOptions
ParallelOptions

この操作の動作を構成するオブジェクト。

body
Action<TSource>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

parallelOptions 引数の CancellationToken が取り消されました

source 引数が null です。

- または -

parallelOptions 引数が null です。

- または -

body 引数が null です。

すべてのスレッドでスローされたすべての個別の例外を含む例外。

parallelOptions 内の CancellationTokenSource に関連付けられている CancellationToken は破棄されました。

注釈

デリゲートは body 、列挙可能な 要素 source ごとに 1 回呼び出されます。 これは、パラメーターとして現在の要素と共に提供されます。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

foreach に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる For Each (Visual Basic の場合は IEnumerable) 操作を実行します。

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

型パラメーター

TSource

ソース内のデータの型。

パラメーター

source
IEnumerable<TSource>

列挙可能なデータ ソース。

parallelOptions
ParallelOptions

この操作の動作を構成するオブジェクト。

body
Action<TSource,ParallelLoopState>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

parallelOptions 引数の CancellationToken が取り消されました

source 引数が null です。

- または -

parallelOptions 引数が null です。

- または -

body 引数が null です。

すべてのスレッドでスローされたすべての個別の例外を含む例外。

parallelOptions 内の CancellationTokenSource に関連付けられている CancellationToken は破棄されました。

注釈

デリゲートは body 、列挙可能な 要素 source ごとに 1 回呼び出されます。 これは、現在の要素と ParallelLoopState 、ループを途中で中断するために使用できるインスタンスというパラメーターを使用して提供されます。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

foreach に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる For Each (Visual Basic の場合は OrderablePartitioner<TSource>) 操作を実行します。

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

型パラメーター

TSource

source の要素の型。

パラメーター

source
OrderablePartitioner<TSource>

元のデータ ソースを格納している順序付け可能なパーティショナー。

parallelOptions
ParallelOptions

この操作の動作を構成するオブジェクト。

body
Action<TSource,ParallelLoopState,Int64>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

parallelOptions 引数の CancellationToken が取り消されました

source 引数が null です。

- または -

parallelOptions 引数が null です。

- または -

body 引数が null です。

parallelOptions 内の CancellationTokenSource に関連付けられている CancellationToken は破棄されました。

順序付け可能のパーティショナー、sourceSupportsDynamicPartitions プロパティは false を返します。

- または -

順序付け可能のパーティショナー、sourceKeysNormalized プロパティは false を返します。

- または -

順序付け可能なパーティショナー、source 内のメソッドが null を返したときにスローされる例外。

指定のデリゲートの 1 つからスローされる例外を含める目的でスローされる例外。

注釈

このオーバーロードは、既定のパーティション分割スキームをオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体では、範囲をパーティション分割するとメリットが得られる場合があります。 メソッドは Parallel.ForEach 、カスタム パーティショナーが動的パーティション分割をサポートすることを想定しています。 詳細については、「PLINQ および TPL 用のカスタム パーティショナー」および「方法: 動的パーティションを実装する」を参照してください。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Partitioner に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成できる foreach (Visual Basic の場合は For Each) 操作を実行します。

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

型パラメーター

TSource

source の要素の型。

パラメーター

source
Partitioner<TSource>

元のデータ ソースを格納しているパーティショナー。

parallelOptions
ParallelOptions

この操作の動作を構成するオブジェクト。

body
Action<TSource>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

parallelOptions 引数の CancellationToken が取り消されました。

parallelOptions 内の CancellationTokenSource に関連付けられている CancellationToken は破棄されました。

source 引数が null です。

- または -

parallelOptions 引数が null です。

- または -

body 引数が null です。

source パーティショナーの SupportsDynamicPartitions プロパティは false を返します。

- または -

source パーティショナー内のメソッドが null を返したときにスローされる例外。

指定のデリゲートの 1 つからスローされる例外を含める目的でスローされる例外。

注釈

このオーバーロードは、既定のパーティション分割スキームをオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体では、範囲をパーティション分割するとメリットが得られる場合があります。 メソッドは Parallel.ForEach 、カスタム パーティショナーが動的パーティション分割をサポートすることを想定しています。 詳細については、「PLINQ および TPL 用のカスタム パーティショナー」および「方法: 動的パーティションを実装する」を参照してください。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

foreach に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる、64 ビットのインデックスを持つ For Each (Visual Basic の場合は IEnumerable) 操作を実行します。

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

型パラメーター

TSource

ソース内のデータの型。

パラメーター

source
IEnumerable<TSource>

列挙可能なデータ ソース。

parallelOptions
ParallelOptions

この操作の動作を構成するオブジェクト。

body
Action<TSource,ParallelLoopState,Int64>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

parallelOptions 引数の CancellationToken が取り消されました

source 引数が null です。

- または -

parallelOptions 引数が null です。

- または -

body 引数が null です。

すべてのスレッドでスローされたすべての個別の例外を含む例外。

parallelOptions 内の CancellationTokenSource に関連付けられている CancellationToken は破棄されました。

注釈

デリゲートは body 、列挙可能な 要素 source ごとに 1 回呼び出されます。 これは、現在の要素、ループの途中で中断するために使用できるインスタンス、 ParallelLoopState および現在の要素のインデックス (Int64) というパラメーターで提供されます。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

Partitioner に対して、イテレーションが並列で実行される可能性があり、ループの状態を監視および操作できる foreach (Visual Basic の場合は For Each) 操作を実行します。

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

型パラメーター

TSource

source の要素の型。

パラメーター

source
Partitioner<TSource>

元のデータ ソースを格納しているパーティショナー。

body
Action<TSource,ParallelLoopState>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

source 引数が null です。

- または -

body 引数が null です。

source パーティショナーの SupportsDynamicPartitions プロパティは false を返します。

- または -

source パーティショナーのメソッドは null を返します。

- または -

source パーティショナーの GetPartitions(Int32) メソッドが正しいパーティション数を返しません。

指定のデリゲートの 1 つからスローされる例外を含める目的でスローされる例外。

注釈

このオーバーロードは、既定のパーティション分割スキームをオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体では、範囲をパーティション分割するとメリットが得られる場合があります。 メソッドは Parallel.ForEach 、カスタム パーティショナーが動的パーティション分割をサポートすることを想定しています。 詳細については、「PLINQ および TPL 用のカスタム パーティショナー」および「方法: 動的パーティションを実装する」を参照してください。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

foreach に対して、イテレーションが並列で実行される可能性のある For Each (Visual Basic の場合は Partitioner) 操作を実行します。

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

型パラメーター

TSource

source の要素の型。

パラメーター

source
Partitioner<TSource>

元のデータ ソースを格納しているパーティショナー。

body
Action<TSource>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

source 引数が null です。

- または -

body 引数が null です。

source パーティショナーの SupportsDynamicPartitions プロパティは false を返します。

- または -

source パーティショナー内のメソッドが null を返したときにスローされる例外。

- または -

source パーティショナーの GetPartitions(Int32) メソッドが正しいパーティション数を返しません。

指定のデリゲートの 1 つからスローされる例外を含める目的でスローされる例外。

次の例は、 で 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

注釈

このオーバーロードは、既定のパーティション分割スキームをオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体では、範囲をパーティション分割するとメリットが得られる場合があります。 メソッドは Parallel.ForEach 、カスタム パーティショナーが動的パーティション分割をサポートすることを想定しています。 詳細については、「PLINQ および TPL 用のカスタム パーティショナー」および「方法: 動的パーティションを実装する」を参照してください。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

IEnumerable に対して、イテレーションが並列で実行される可能性があり、ループの状態を監視および操作できる、64 ビットのインデックスを持つ foreach (Visual Basic の場合は For Each) 操作を実行します。

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

型パラメーター

TSource

ソース内のデータの型。

パラメーター

source
IEnumerable<TSource>

列挙可能なデータ ソース。

body
Action<TSource,ParallelLoopState,Int64>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

source 引数が null です。

- または -

body 引数が null です。

すべてのスレッドでスローされたすべての個別の例外を含む例外。

注釈

デリゲートは body 、列挙可能な 要素 source ごとに 1 回呼び出されます。 これは、現在の要素、ループの途中で中断するために使用できるインスタンス、 ParallelLoopState および現在の要素のインデックス (Int64) というパラメーターで提供されます。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

foreach に対して、イテレーションが並列で実行される可能性があり、ループの状態を監視および操作できる For Each (Visual Basic の場合は OrderablePartitioner<TSource>) 操作を実行します。

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

型パラメーター

TSource

source の要素の型。

パラメーター

source
OrderablePartitioner<TSource>

元のデータ ソースを格納している順序付け可能なパーティショナー。

body
Action<TSource,ParallelLoopState,Int64>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

source 引数が null です。

- または -

body 引数が null です。

順序付け可能のパーティショナー、sourceSupportsDynamicPartitions プロパティは false を返します。

- または -

順序付け可能のパーティショナー、ソースの KeysNormalized プロパティは false を返します。

- または -

ソースの順序付け可能なパーティショナーのすべてのメソッドは、null を返します。

指定したデリゲートのいずれかからスローされた例外。

注釈

このオーバーロードは、既定のパーティション分割スキームをオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体では、範囲をパーティション分割するとメリットが得られる場合があります。 メソッドは Parallel.ForEach 、カスタム パーティショナーが動的パーティション分割をサポートすることを想定しています。 詳細については、「PLINQ および TPL 用のカスタム パーティショナー」および「方法: 動的パーティションを実装する」を参照してください。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

foreach に対して、イテレーションが並列で実行される可能性のある For Each (Visual Basic の場合は IEnumerable) 操作を実行します。

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

型パラメーター

TSource

ソース内のデータの型。

パラメーター

source
IEnumerable<TSource>

列挙可能なデータ ソース。

body
Action<TSource>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

source 引数が null です。

- または -

body 引数が null です。

すべてのスレッドでスローされたすべての個別の例外を含む例外。

次の例では、 メソッドを ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) 使用して、テキスト ファイル内の母音と空白以外の文字の数をカウントします。 この場合、 ParallelLoopResult メソッドによって返される値は無視されます。 操作は並列で実行できるため、カウンター変数のインクリメントはアトミック操作であり、複数のスレッドがカウンター変数に同時にアクセスしようとしないことに注意してください。 この目的のために、この例では、 ステートメント (C#) と SyncLock ステートメント (Visual Basic の場合) を使用lockします。

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

注釈

デリゲートは body 、列挙可能な 要素 source ごとに 1 回呼び出されます。 これは、パラメーターとして現在の要素と共に提供されます。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

foreach に対して、イテレーションが並列で実行される可能性があり、ループ オプションを構成でき、ループの状態を監視および操作できる For Each (Visual Basic の場合は Partitioner) 操作を実行します。

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

型パラメーター

TSource

source の要素の型。

パラメーター

source
Partitioner<TSource>

元のデータ ソースを格納しているパーティショナー。

parallelOptions
ParallelOptions

この操作の動作を構成するオブジェクト。

body
Action<TSource,ParallelLoopState>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

parallelOptions 引数の CancellationToken が取り消されました。

parallelOptions 内の CancellationTokenSource に関連付けられている CancellationToken は破棄されました。

source 引数が null です。

- または -

parallelOptions 引数が null です。

- または -

body 引数が null です。

source パーティショナーの SupportsDynamicPartitions プロパティは false を返します。

- または -

source パーティショナー内のメソッドが null を返したときにスローされる例外。

指定のデリゲートの 1 つからスローされる例外を含める目的でスローされる例外。

注釈

このオーバーロードは、既定のパーティション分割スキームをオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体では、範囲をパーティション分割するとメリットが得られる場合があります。 メソッドは Parallel.ForEach 、カスタム パーティショナーが動的パーティション分割をサポートすることを想定しています。 詳細については、「PLINQ および TPL 用のカスタム パーティショナー」および「方法: 動的パーティションを実装する」を参照してください。

こちらもご覧ください

適用対象

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

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

foreach に対して、イテレーションが並列で実行される可能性があり、ループの状態を監視および操作できる For Each (Visual Basic の場合は IEnumerable) 操作を実行します。

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

型パラメーター

TSource

ソース内のデータの型。

パラメーター

source
IEnumerable<TSource>

列挙可能なデータ ソース。

body
Action<TSource,ParallelLoopState>

1 回のイテレーションにつき 1 回呼び出されるデリゲート。

戻り値

完了したループの部分に関する情報を格納している構造。

例外

source 引数が null です。

- または -

body 引数が null です。

すべてのスレッドでスローされたすべての個別の例外を含む例外。

注釈

デリゲートは body 、列挙可能な 内の各要素に対して source 1 回呼び出されます。 現在の要素と ParallelLoopState 、ループの途中から抜け出すために使用できるインスタンスというパラメーターが用意されています。

こちらもご覧ください

適用対象