Безопасно ли Parallel.Foreach присваивать значения целевым элементам списка? - PullRequest
0 голосов
/ 01 октября 2018

У меня есть список исходников с измененными значениями, и мне нужно передать эти изменения во второй список с помощью Parallel.Foreach.

Мне интересно, является ли это потокобезопасным, пример кода:

Parallel.ForEach(sourceList, (srcItem) =>
{
    var destItem = destinationList.FirstOrDefault(p => p.Id == srcItem.Id);
    destItem.Color = srcItem.Color;
});

Это нормально?или нужно установить синхронизацию или блокировку?

1 Ответ

0 голосов
/ 01 октября 2018

Если условия такие

1) гарантируется, что существует взаимно-однозначное сопоставление между источником id и пунктом назначения id

2) destinationList никогда не изменяется в течение Parallel.ForEach и ни его содержимого, за исключением присвоения Color

. Этот код должен выполняться безопасно, и синхронизация не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...