我有一个List集合,希望在多线程应用程序中对其进行迭代。每次迭代时,我需要保护它,因为它可能会发生更改,我不希望在使用foreach时出现“集合已修改”异常。
正确的方法是什么?
每次访问或循环时都使用锁。我非常担心死锁。也许我只是过于担心了使用锁,不该这样。如果我选择这个方法,我需要知道什么才能避免死锁?锁是否相当有效率?
使用List<>.ToArray()在每次使用foreach时复制到数组中。这会导致性能下降,但很容易做到。我担心内存抖动以及复制所需的时间。使用ToArray是否线程安全?
不要使用foreach,改用for循环。这样做是否需要每次进行长度检查以确保列表没有缩小?那看起来很麻烦。