Избегайте замыканий при вызове Parallel.For()C#

Место общения программистов C#
Anonymous
Избегайте замыканий при вызове Parallel.For()

Сообщение Anonymous »

Я провожу тестирование элементов пользовательского интерфейса на попадание следующим образом:

Код: Выделить всё

internal MyElement[] HitTest((double x, double y) point, double scale)
{
ConcurrentBag geoms = new ConcurrentBag();

var point = new Point { X = point.x, Y = point.y };

Parallel.For(0,UIElements.Length, (d) =>
{
var element = UIElements[d];
if (element is IHitTestable ht && ht.HitTest(ref point,scale) geoms.Add(element);
});

return geoms.ToArray();
}
Я хотел бы провести рефакторинг, чтобы удалить замыкания вокруг локальных переменных; также я считаю, что каждая итерация цикла может выделять анонимные элементы (классы, методы) для каждой итерации.
Проблема в том, что параметры Parallel.For() ожидают Action в качестве делегата для параллельного выполнения, тогда как мне нужен делегат Action для обработки локальных переменных, чтобы я мог написать метод времени компиляции с помощью ожидаемые типы аргументов.
Как предоставить Parallel.For() соответствующий делегат без анонимности?
Я верю в это проблема может быть до неприличия параллельной, но этого не произойдет, если будет конкуренция за кучу.

Подробнее здесь: https://stackoverflow.com/questions/786 ... rallel-for

Вернуться в «C#»