これは、Parallel.Foreach ループ機能を学習しようとしているサンプル テスト アプリです。
static void Main(string[] args)
{
List<string> Months = new List<string>()
{
"Jan", "Feb", "Mar", "Apr", "May", "June"
};
Parallel.ForEach(Months, (x) => ProcessRandom(x));
Console.ReadLine();
}
public static void ProcessRandom(string s)
{
Random r = new Random();
int i = r.Next(1, 100);
Thread.Sleep(1000);
Console.WriteLine(string.Format("Month Name {0} and Random ID assigned {1}", s, i));
}
foreach の並列処理についての私の理解では、リストのパラメーターを使用して ProcessRandom メソッドを並列に実行するということです。そのメソッド内のすべての変数は分離され、互いに独立して実行されます。しかし、実行すると、整数 'i' に格納されているランダム値が月リストのいくつかのエントリで同じであることを示し、1 つまたは 2 つのランダム値が異なることがわかります。なぜこれはそのように振る舞うのですか?反復ごとに新しいランダム値を作成する並列ループはすべきではありません。parallelOptions を使用し、Parallelism の MaxDegree を 1 に設定すると、変数 'i' に異なる値が表示されます
並列ループを理解するために私を導いてください。