Я использую lock
для добавления элементов в list
параллельно для foreach, как показано ниже.Что представляет собой объект для блокировки
Parallel.ForEach(list, i =>
{
//...
lock (LockThread)
{
_asset.Add(...);
}
});
LockThread является static readonly object
.
Что я понимаю, так это то, что lock
делает блок одним потоком и не допускает многозадачность.
Итак, почему я должен дать ему объект? Что оно делает?
Почему я не могу просто написать
lock {...}
В качестве дополнительной заметки вы можете переосмыслить свою коллекцию ''assass и' lock' и, возможно, использовать 'ConcurrentBag' в сочетании с' Parallel.ForEach() '. «блокировка» чего-то является довольно дорогостоящей операцией и ограничивает масштабируемость. Проверьте библиотеку _ [Библиотека параллелизма задач (TPL)] (https://msdn.microsoft.com/en-us/library/dd460717 (v = vs.110) .aspx) _ – MickyD