相关疑难解决方法(0)

Lock vs. ToArray用于List集合的线程安全foreach访问

我有一个List集合,我想在多线程应用程序中迭代它.我需要在每次迭代时保护它,因为它可以被更改,而且当我做foreach时我不希望"收集被修改"异常.

这样做的正确方法是什么?

  1. 每次访问或循环时都使用锁定.我很害怕死锁.也许我只是偏执使用锁而不应该.如果我走这条路以避免死锁,我需要知道什么?锁是否相当有效?

  2. 每次我执行foreach时,使用List <>.ToArray()复制到数组.这会导致性能下降,但很容易做到.我担心内存颠簸以及复制它的时间.看起来过分了.使用ToArray是否安全?

  3. 不要使用foreach而是使用for循环.每次我这样做以确保列表没有缩小时,我不需要进行长度检查吗?这看起来很烦人.

c# foreach multithreading locking toarray

22
推荐指数
3
解决办法
1万
查看次数

标签 统计

c# ×1

foreach ×1

locking ×1

multithreading ×1

toarray ×1