Играя с параллельной обработкой, у меня есть цикл Parallel.For
, который выполняет поиск по перечисляемому, и, если он не находит то, что ищет, добавляет его.Я продолжаю сталкиваться с проблемами, когда один поток изменяет перечисляемое, в то время как другой поток выполняет поиск, что вызывает исключение.Очевидное решение - использовать lock
как для поиска, так и для входа, но это немного грубая сила.Мне бы хотелось, чтобы он мог запускать несколько одновременных поисков, поэтому я не хочу полностью блокировать его, пока один поток выполняет поиск, но я хочу запретить ему выполнять добавление во время поиска.Есть ли способ сделать двухуровневую блокировку таким образом?