Parallel.ForEach メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
イテレーションを並列で実行できるforeach (Visual Basic のFor Each ) 操作を実行します。
オーバーロード
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
foreach (Visual Basic では For Each) 操作を実行します。スレッド ローカル データは、IEnumerable で並列実行でき、ループ オプションを構成でき、ループの状態を監視および操作できます。
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 回呼び出されるデリゲート。
- localFinally
- Action<TLocal>
各タスクのローカル状態に対して最終的なアクションを実行するデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
source引数はnull。
-又は-
parallelOptions引数はnull。
-又は-
body引数はnull。
-又は-
localInit引数はnull。
-又は-
localFinally引数はnull。
CancellationToken引数のparallelOptionsは取り消されます。
CancellationTokenSource内のCancellationTokenに関連付けられているparallelOptionsが破棄されました。
すべてのスレッドでスローされるすべての個々の例外を含む例外。
注釈
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>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
スレッド ローカル データと 64 ビット インデックスを使用して、foreach (Visual Basic のFor Each) 操作を実行します。この操作では、IEnumerable で反復処理を並列で実行でき、ループ オプションを構成でき、ループの状態を監視および操作できます。
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 回呼び出されるデリゲート。
- localFinally
- Action<TLocal>
各タスクのローカル状態に対して最終的なアクションを実行するデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
source引数はnull。
-又は-
parallelOptions引数はnull。
-又は-
body引数はnull。
-又は-
localInit引数はnull。
-又は-
localFinally引数はnull。
CancellationToken引数のparallelOptionsは取り消されます。
CancellationTokenSource内のCancellationTokenに関連付けられているparallelOptionsが破棄されました。
すべてのスレッドでスローされるすべての個々の例外を含む例外。
注釈
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>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
foreach (Visual Basic では For Each) 操作を実行します。この操作は、反復処理が並列で実行される可能性がある 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 回呼び出されるデリゲート。
- localFinally
- Action<TLocal>
各タスクのローカル状態に対して最終的なアクションを実行するデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
source引数はnull。
-又は-
parallelOptions引数はnull。
-又は-
body引数はnull。
-又は-
localInit引数はnull。
-又は-
localFinally引数はnull。
source
PartitionerのSupportsDynamicPartitions プロパティは、falseを返すか、パーティションnull返します。
すべてのスレッドでスローされるすべての個々の例外を含む例外。
CancellationToken引数のparallelOptionsは取り消されます。
CancellationTokenSource内のCancellationTokenに関連付けられているparallelOptionsが破棄されました。
注釈
このオーバーロードは、既定のパーティション分割スキームをオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体は、範囲をパーティション分割することでメリットが得られる場合があります。 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>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
64 ビット インデックスを使用し、foreach (Visual Basic では For Each) 操作を実行し、OrderablePartitioner<TSource> でスレッド ローカル データを使用して反復処理を並列実行し、ループ オプションを構成し、ループの状態を監視および操作できます。
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
スレッド ローカル データの型。
パラメーター
元のデータ ソースを含む順序付け可能なパーティショナー。
- parallelOptions
- ParallelOptions
この操作の動作を構成するオブジェクト。
- localInit
- Func<TLocal>
各タスクのローカル データの初期状態を返す関数デリゲート。
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
イテレーションごとに 1 回呼び出されるデリゲート。
- localFinally
- Action<TLocal>
各タスクのローカル状態に対して最終的なアクションを実行するデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
source引数はnull。
-又は-
parallelOptions引数はnull。
-又は-
body引数はnull。
-又は-
localInitまたはlocalFinally引数がnull。
source
PartitionerのSupportsDynamicPartitions プロパティは、falseを返すか、パーティションnull返します。
すべてのスレッドでスローされるすべての個々の例外を含む例外。
CancellationToken引数のparallelOptionsは取り消されます。
CancellationTokenSource内のCancellationTokenに関連付けられているparallelOptionsが破棄されました。
注釈
このオーバーロードは、既定のパーティション分割スキームをオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体は、範囲をパーティション分割することでメリットが得られる場合があります。 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>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- 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, 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 回呼び出されるデリゲート。
- 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>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
foreach (Visual Basic では For Each) 操作を実行します。この操作は、反復処理が並列で実行され、ループの状態を監視および操作できる、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 回呼び出されるデリゲート。
- 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>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
foreach (Visual Basic では For Each) 操作を実行します。この操作は、反復処理が並列で実行され、ループの状態を監視および操作できる、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 回呼び出されるデリゲート。
- localFinally
- Action<TLocal>
各タスクのローカル状態に対して最終的なアクションを実行するデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
source引数はnull。
-又は-
body引数はnull。
-又は-
localInit引数はnull。
-又は-
localFinally引数はnull。
source
PartitionerのSupportsDynamicPartitions プロパティは、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>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
foreach (Visual Basic では For Each) 操作を実行します。この操作は、反復処理が並列で実行される可能性がある 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
スレッド ローカル データの型。
パラメーター
元のデータ ソースを含む順序付け可能なパーティショナー。
- localInit
- Func<TLocal>
各タスクのローカル データの初期状態を返す関数デリゲート。
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
イテレーションごとに 1 回呼び出されるデリゲート。
- localFinally
- Action<TLocal>
各タスクのローカル状態に対して最終的なアクションを実行するデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
source引数はnull。
-又は-
body引数はnull。
-又は-
localInit引数はnull。
-又は-
localFinally引数はnull。
source
PartitionerのSupportsDynamicPartitions プロパティは、falseを返すか、パーティションnull返します。
すべてのスレッドでスローされるすべての個々の例外を含む例外。
注釈
このオーバーロードは、既定のパーティション分割スキームをオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体は、範囲をパーティション分割することでメリットが得られる場合があります。 ForEach メソッドでは、カスタム パーティショナーが動的パーティション分割をサポートすることが想定されています。 詳細については、「PLINQ と TPL のカスタム パーティショナー」および「方法: 動的パーティションを実装する」を参照してください。
localInit デリゲートは、ループの実行に参加するタスクごとに 1 回呼び出され、それらの各タスクの初期ローカル状態を返します。 これらの初期状態は、各タスクの最初の body 呼び出しに渡されます。 次に、後続の本体呼び出しのたびに、次の本文呼び出しに渡される変更された可能性のある状態値が返されます。 最後に、各タスクの最後の本文呼び出しは、 localFinally デリゲートに渡される状態値を返します。
localFinally デリゲートは、各タスクのローカル状態に対して最終的なアクションを実行するために、タスクごとに 1 回呼び出されます。 このデリゲートは、複数のタスクで同時に呼び出される場合があります。そのため、すべての共有変数へのアクセスを同期する必要があります。
Parallel.ForEach メソッドは、既存のタスクが完了し、新しいタスクに置き換えられると、実行の有効期間中にスレッドよりも多くのタスクを使用する可能性があります。 これにより、基になる TaskScheduler オブジェクトは、ループにサービスを提供するスレッドを追加、変更、または削除できます。
適用対象
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- 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 回呼び出されるデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
parallelOptions引数のCancellationTokenは取り消されます
すべてのスレッドでスローされるすべての個々の例外を含む例外。
CancellationTokenSource内のCancellationTokenに関連付けられているparallelOptionsが破棄されました。
注釈
body デリゲートは、source列挙可能な要素ごとに 1 回呼び出されます。 現在の要素をパラメーターとして指定します。
適用対象
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- 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, 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 回呼び出されるデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
parallelOptions引数のCancellationTokenは取り消されます
すべてのスレッドでスローされるすべての個々の例外を含む例外。
CancellationTokenSource内のCancellationTokenに関連付けられているparallelOptionsが破棄されました。
注釈
body デリゲートは、source列挙可能な要素ごとに 1 回呼び出されます。 現在の要素と、ループを途中で中断するために使用できる ParallelLoopState インスタンスというパラメーターが用意されています。
適用対象
ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
OrderablePartitioner<TSource> でforeach (Visual BasicのFor Each) 操作を実行します。この操作では、反復処理を並列で実行したり、ループ オプションを構成したり、ループの状態を監視および操作したりできます。
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内の要素の型。
パラメーター
元のデータ ソースを含む順序付け可能なパーティショナー。
- parallelOptions
- ParallelOptions
この操作の動作を構成するオブジェクト。
- body
- Action<TSource,ParallelLoopState,Int64>
イテレーションごとに 1 回呼び出されるデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
parallelOptions引数のCancellationTokenは取り消されます
CancellationTokenSource内のCancellationTokenに関連付けられているparallelOptionsが破棄されました。
source順序付け可能なパーティショナーのSupportsDynamicPartitions プロパティは、falseを返します。
-又は-
source順序付け可能なパーティショナーのKeysNormalized プロパティは、falseを返します。
-又は-
順序指定可能なパーティショナー内のメソッドがnullを返source場合にスローされる例外。
指定したデリゲートのいずれかからスローされた例外を格納するためにスローされる例外。
注釈
このオーバーロードは、既定のパーティション分割スキームをオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体は、範囲をパーティション分割することでメリットが得られる場合があります。 Parallel.ForEach メソッドでは、カスタム パーティショナーが動的パーティション分割をサポートすることが想定されています。 詳細については、「PLINQ と TPL のカスタム パーティショナー」および「方法: 動的パーティションを実装する」を参照してください。
適用対象
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- 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 回呼び出されるデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
CancellationToken引数のparallelOptionsは取り消されます。
CancellationTokenSource内のCancellationTokenに関連付けられているparallelOptionsが破棄されました。
source パーティショナーの SupportsDynamicPartitions プロパティは、falseを返します。
-又は-
source パーティショナー内のメソッドがnullを返すとスローされる例外。
指定したデリゲートのいずれかからスローされた例外を格納するためにスローされる例外。
注釈
このオーバーロードは、既定のパーティション分割スキームをオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体は、範囲をパーティション分割することでメリットが得られる場合があります。 Parallel.ForEach メソッドでは、カスタム パーティショナーが動的パーティション分割をサポートすることが想定されています。 詳細については、「PLINQ と TPL のカスタム パーティショナー」および「方法: 動的パーティションを実装する」を参照してください。
適用対象
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- 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, 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 回呼び出されるデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
parallelOptions引数のCancellationTokenは取り消されます
すべてのスレッドでスローされるすべての個々の例外を含む例外。
CancellationTokenSource内のCancellationTokenに関連付けられているparallelOptionsが破棄されました。
注釈
body デリゲートは、source列挙可能な要素ごとに 1 回呼び出されます。 このパラメーターには、現在の要素、途中でループから抜け出すために使用できる ParallelLoopState インスタンス、および現在の要素のインデックス (Int64) が用意されています。
適用対象
ForEach<TSource>(Partitioner<TSource>, Action<TSource,ParallelLoopState>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
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 回呼び出されるデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
source パーティショナーの SupportsDynamicPartitions プロパティは、falseを返します。
-又は-
source パーティショナーのメソッドは、nullを返します。
-又は-
source パーティショナーの GetPartitions(Int32) メソッドは、正しい数のパーティションを返しません。
指定したデリゲートのいずれかからスローされた例外を格納するためにスローされる例外。
注釈
このオーバーロードは、既定のパーティション分割スキームをオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体は、範囲をパーティション分割することでメリットが得られる場合があります。 Parallel.ForEach メソッドでは、カスタム パーティショナーが動的パーティション分割をサポートすることが想定されています。 詳細については、「PLINQ と TPL のカスタム パーティショナー」および「方法: 動的パーティションを実装する」を参照してください。
適用対象
ForEach<TSource>(Partitioner<TSource>, Action<TSource>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- 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> ^ 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 回呼び出されるデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
source パーティショナーの SupportsDynamicPartitions プロパティは、falseを返します。
-又は-
source パーティショナー内のメソッドがnullを返すとスローされる例外。
-又は-
source パーティショナーの GetPartitions(Int32) メソッドは、正しい数のパーティションを返しません。
指定したデリゲートのいずれかからスローされた例外を格納するためにスローされる例外。
例
次の例は、 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>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
foreach (Visual Basic では For Each) 操作を実行します。IEnumerable で 64 ビット インデックスを使用して反復処理を並列実行でき、ループの状態を監視および操作できます。
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 回呼び出されるデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
すべてのスレッドでスローされるすべての個々の例外を含む例外。
注釈
body デリゲートは、source列挙可能な要素ごとに 1 回呼び出されます。 このパラメーターには、現在の要素、途中でループから抜け出すために使用できる ParallelLoopState インスタンス、および現在の要素のインデックス (Int64) が用意されています。
適用対象
ForEach<TSource>(OrderablePartitioner<TSource>, Action<TSource,ParallelLoopState,Int64>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
反復処理が並列で実行され、ループの状態を監視および操作できる OrderablePartitioner<TSource> に対して、foreach (Visual Basic のFor Each) 操作を実行します。
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内の要素の型。
パラメーター
元のデータ ソースを含む順序付け可能なパーティショナー。
- body
- Action<TSource,ParallelLoopState,Int64>
イテレーションごとに 1 回呼び出されるデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
source順序付け可能なパーティショナーのSupportsDynamicPartitions プロパティは、falseを返します。
-又は-
ソースオーダー可能なパーティショナーの KeysNormalized プロパティは、 falseを返します。
-又は-
ソースオーダー可能なパーティショナー内のすべてのメソッドは、 nullを返します。
指定したデリゲートのいずれかからスローされた例外。
注釈
このオーバーロードは、既定のパーティション分割スキームをオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体は、範囲をパーティション分割することでメリットが得られる場合があります。 Parallel.ForEach メソッドでは、カスタム パーティショナーが動的パーティション分割をサポートすることが想定されています。 詳細については、「PLINQ と TPL のカスタム パーティショナー」および「方法: 動的パーティションを実装する」を参照してください。
適用対象
ForEach<TSource>(IEnumerable<TSource>, Action<TSource>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
反復処理を並列で実行できるIEnumerableに対して、foreach (Visual Basic のFor Each) 操作を実行します。
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 回呼び出されるデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
すべてのスレッドでスローされるすべての個々の例外を含む例外。
例
次の例では、 ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) メソッドを使用して、テキスト ファイル内の母音と空白以外の文字の数をカウントします。 この場合、メソッドによって返される ParallelLoopResult 値は無視されます。 操作は並列で実行できるため、カウンター変数のインクリメントはアトミック操作であり、複数のスレッドがカウンター変数への同時アクセスを試みないことを確認する必要があります。 この目的のために、この例では lock ステートメント (C#) と SyncLock ステートメント (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
注釈
body デリゲートは、source列挙可能な要素ごとに 1 回呼び出されます。 現在の要素をパラメーターとして指定します。
適用対象
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- 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, 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 回呼び出されるデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
CancellationToken引数のparallelOptionsは取り消されます。
CancellationTokenSource内のCancellationTokenに関連付けられているparallelOptionsが破棄されました。
source パーティショナーの SupportsDynamicPartitions プロパティは、falseを返します。
-又は-
source パーティショナー内のメソッドがnullを返すとスローされる例外。
指定したデリゲートのいずれかからスローされた例外を格納するためにスローされる例外。
注釈
このオーバーロードは、既定のパーティション分割スキームをオーバーライドするシナリオで提供されます。 たとえば、小さなループ本体は、範囲をパーティション分割することでメリットが得られる場合があります。 Parallel.ForEach メソッドでは、カスタム パーティショナーが動的パーティション分割をサポートすることが想定されています。 詳細については、「PLINQ と TPL のカスタム パーティショナー」および「方法: 動的パーティションを実装する」を参照してください。
適用対象
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState>)
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
- ソース:
- Parallel.cs
反復処理が並列で実行される可能性があり、ループの状態を監視および操作できるIEnumerableに対して、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 ^> ^ 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 回呼び出されるデリゲート。
返品
ループのどの部分が完了したかについての情報を含む構造体。
例外
すべてのスレッドでスローされるすべての個々の例外を含む例外。
注釈
body デリゲートは、source列挙可能な要素ごとに 1 回呼び出されます。 現在の要素と、ループを途中で中断するために使用できる ParallelLoopState インスタンスというパラメーターが用意されています。