这是我尝试学习 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”中的随机值对于月份列表中的几个输入显示相同,并且一个或可能是 2 将具有不同的随机值。为什么会有这样的行为。并行循环不应该为每次迭代创建新的随机值。如果我使用 parallelOptions 并将 MaxDegree of Parallelism 设置为 1,那么我会在变量“i”中看到不同的值
请指导我理解并行循环。