Этот код работает корректно только в режиме отладки. Я не понимаю, что случилось.Код Parallel.For работает только в режиме отладки
Я попытался изменить код, но без какого-либо прогресса. Я хотел бы добавить результат вызова функции newRow в hashSet, если первый параметр равен true.
foreach (structNumbers sn in numbers)
//Parallel.ForEach(numbers, new ParallelOptions { MaxDegreeOfParallelism = 1 }, (sn) =>
{
#region
//for (Int32 v = 0; v < 16; v++)
Parallel.For<Tuple<Boolean, mpz_t, mpz_t>>(0, 16,
()=> { return new Tuple<Boolean, mpz_t, mpz_t>(false, 0, 0); },
(v, pls, state) =>
{
#region
Interlocked.Increment(ref countChecked);
//if (newRow(i, j, v, t, index, sn.n, sn.m, out nMin, out mMin) == true)
//lock(thisLock)
Tuple<Boolean, mpz_t, mpz_t> res = newRow(i, j, v/4, v % 4, index, sn.n, sn.m);
state = new Tuple<bool, mpz_t, mpz_t>(res.Item1, res.Item2, res.Item3);
return state;
#endregion
},
state => {
lock (thisLock)
{
if (state.Item1 == true)
{
#region
numbersTemp.Add(new structNumbers(state.Item2, state.Item3));
//numbersTemp.Add(new structNumbers(nMin, mMin));
//Console.WriteLine("bla");
#endregion
}
}
}
);
#endregion
}
//);
Не могли бы вы объяснить, какую ошибку/неправильное поведение вы получили? –
У меня нет ошибок. numbersTemp не содержит всех элементов. это все –
Утром попробуйте снова использовать debug, но теперь мой код работает неправильно. –