Избегайте замыканий при вызове 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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