В документации указано иное («Делегатор тела вызывается один раз для каждого значения в диапазоне итераций»).Может Parallel.For Выполнить одно и то же действие (один и тот же указатель) более одного раза?
Однако мы наблюдали поведение, которое было бы объяснено, если одно и то же действие выполнялось более или менее одновременно разными потоками.
Я спрашиваю про самую простую перегрузку: Parallel.For(Int32, Int32, Action<Int32>)
.
Вам будет лучше искать проблемы в своем собственном коде, а не надеяться, что TPL будет сломан. Не похоже, что это функциональность края в TPL, это очень мейнстрим. Какое еще может быть объяснение наблюдаемого поведения? Добавьте код отладки в делегат, если на вас ничего не выйдет. –
@Steve, при всем уважении, это был не TPL, который, как я думал, может быть «сломан», но документация. Есть несколько мест в .NET, где данный делегат может быть вызван параллельно (_e.g._, гонка для инициализации). Да, это Funcs not Actions, но раньше я был удивлен .NET. Никакого вреда в спросе (или так я думал). –
@WillMontgomery, TPL спроектирован таким образом, чтобы избежать проблем с потоками, таких как условия гонки. Это не значит, что вам не нужно быть осторожным с вашим собственным кодом, но это означает, что вы можете зависеть от того, что функции библиотеки ведут себя так, как вы ожидали. – svick