MSDNParallel.For «Thread локальное состояние»
Мой вопрос заключается в следующем: третий параметр в Parallel.For, что он делает?
Когда я меняю его на() => 1d, он удваивает мой результат, устанавливается на две его тройки, но игнорирует десятичные знаки.
Почему он игнорирует десятичные знаки, если это был какой-то удвоение? Что на самом деле происходит там?
Теперь я попытался добавить блокировки. И он не просто инициализирует промежуточный результат указанному значению.
Вот код Im используя:
static void RunParallelForCorrectedAdam()
{
object _lock = new object();
double result = 0d;
// Here we call same method several times.
// for (int i = 0; i < 32; i++)
Parallel.For(0, 32,
// Func<TLocal> localInit,
() => 3d,
// Func<int, ParallelLoopState, TLocal, TLocal> body,
(i, state, interimResult) =>
{
lock (_lock)
{
return interimResult + 1;
}
},
//Final step after the calculations
//we add the result to the final result
// Action<TLocal> localFinally
(lastInterimResult) =>
{
lock (_lock)
{
result += lastInterimResult;
}
}
);
// Print the result
Console.WriteLine("The result is {0}", result);
}
Из ссылки, которую вы указали, объясняется именно то, что делает 0d. – BugFinder
Но это так. Если вы инициализируете переменную для возврата с 3, она даст вам результат 3+ вашего результата. – BugFinder
Я думал, вы не хотите мне помогать. Я извиняюсь. Ive обновил код сейчас. Если я изменю его на 1, это даст мне 34-36. если я изменю его на 2, это даст мне 34-40. Если я изменю его на 3, это даст мне около 34-50. Что это? И если я просто оставлю это на 0d, это даст мне 32 в результате. – MakerOfTheUnicake