Это пример тестового приложения, в котором я пытаюсь изучить функциональность Parallel.Foreach Loop
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'
Пожалуйста, помогите мне понять параллельные циклы.