У меня есть коллекция List, и я хочу перебирать ее в многопоточном приложении. Мне нужно защищать его каждый раз, когда я повторяю его, поскольку он может быть изменен, и я не хочу, чтобы "сбор был изменен" исключениями, когда я делаю foreach.
Каков правильный способ сделать это?
-
Используйте блокировку каждый раз, когда я получаю доступ или цикл. Я скорее боюсь тупиков. Может быть, я просто параноик с помощью блокировки и не должен быть. Что мне нужно знать, если я иду по этому пути, чтобы избежать тупиков? Является ли блокировка достаточно эффективной?
-
Используйте List < > . ToArray() для копирования в массив каждый раз, когда я делаю foreach. Это приводит к поражению производительности, но его легко сделать. Я беспокоюсь о переполнении памяти, а также о времени ее копирования. Просто кажется чрезмерным. Это поточно-безопасное использование ToArray?
-
Не используйте foreach и вместо этого используйте для циклов. Разве мне не нужно было бы проверять длину каждый раз, когда я это делал, чтобы убедиться, что список не сжался? Это кажется раздражающим.