Parallel.For - проходит не все значения? - C#

Узнай цену своей работы

Формулировка задачи:

Объясните пожалуйста, в чем подвох? Использую Parallel.For(0, Длинна.Массива, Функция); Но каждый раз выводится информация, что функция отработала меньшее количество раз.
        private List<int> TestArray1 = new List<int>();
        private List<int> TestArray2 = new List<int>();
 
        private void TestMethod1()
        {
            TestArray1.Clear();
            TestArray2.Clear();
            for (int x = 0; x <= 99999; x++)
            {
                TestArray1.Add(x);
            }
                Parallel.For(0, TestArray1.Count, TestMethod2);
                OnLineCountChange("Массив1 " + TestArray1.Count + "  Массив2 " + TestArray2.Count);
        }
 
        private void TestMethod2(int x)
        {
            TestArray2.Add(x);
        }
 
         private void OnLineCountChange(string countLine)
        {
            if (LineCountChange != null)
                LineCountChange(countLine);
        }
 
        public event Action<string> LineCountChange;
TestArray2 Должен содержать всегда такое же количество записей, как и TestArray1, но при объеме больше 100 000 почти всегда есть разница в 5 - 20 000 элементов

Решение задачи: «Parallel.For - проходит не все значения?»

textual
Листинг программы
private object Lock = new object();
private void TestMethod2(int x)
{
    lock (Lock)
    {
        TestArray2.Add(x);
    }
}

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы