Parallel.ForEachは多スレッドを使用してループを反復します。
Parallel.ForEachはマルチスレッド並列処理用のメソッドで、複数のスレッドを利用してコレクションまたは配列のイテレーションを同時に行い、各イテレーションポイントで指定された処理を実行します。
Parallel.ForEachを使うと、特にループ内の操作が独立しており、互いに待つ必要がない場合に、ループの実行速度を高速化できます。システムのプロセッサコア数に応じて自動的にスレッドが作成され、タスクはそれらのスレッドに割り当てられて並列に実行されます。
Parallel.ForEach を使うサンプルは下記のとおりです。
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
// 创建一个包含整数的数组
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// 使用Parallel.ForEach并行遍历数组
Parallel.ForEach(numbers, (number) =>
{
Console.WriteLine(number);
});
Console.ReadLine();
}
}
上の例では、10 個の整数を格納する配列 `numbers` を作成しています。その後、`Parallel.ForEach` を使用してこの配列を並列的に走査し、各要素に対して単純なプリント操作を実行しています。
プログラムを実行すると、配列の各要素が別のスレッドで並列に処理され、プリントアウトされていることがわかります。
Parallel.ForEachメソッドはブロッキングメソッドであるため、すべての並列処理が完了するまで、これ以降のコードの実行が待機されます。並列処理の完了後にその後続処理を実行する必要がある場合は、Parallel.ForEachメソッドの外側でTask.WaitAllメソッドを使用して、すべての処理が完了するまで待機できます。
並列処理を行うときにはスレッドセーフにアクセスするように注意し、共有データが同時に無秩序にアクセスされないようにする必要があります。