【发布时间】:2010-05-04 04:39:49
【问题描述】:
我有一个不断变化的对象集合,我想不时显示一些有关内容的信息(我的应用程序是多线程的,不同的线程不断提交修改集合中对象的请求,所以这是不可预测的)。
如果我锁定集合,我可以遍历它并毫无问题地获取我的信息 - 但是,这会导致其他线程出现问题,因为它们可能同时提交了多个修改集合的请求,并且将停滞不前。我想了几种方法来解决这个问题,我正在寻找任何建议。
- 制作集合的副本并对其进行迭代,允许原始集合在后台继续更新。集合可能会变大,所以这并不理想,但很安全。
- 使用 For...Next 循环对其进行迭代,如果在我们迭代时从集合中删除了一个项目,则捕获 IndexOutOfBounds 异常。这可能偶尔会导致重复出现在我的快照中,因此也不理想。
还有其他想法吗?我只关心即时快照,所以我不关心反映我的应用程序中的变化——我主要关心的是集合能够以最小的延迟进行更新,并且更新永远不会丢失。
【问题讨论】:
-
我能得到反对票的解释吗?
-
我同意,任何投反对票的人都必须发表一些评论,我曾多次写信给 SO,要求必须发表评论,但 SO 不听,而且我看到主要的缺乏经验的自我膨胀的程序员来投反对票而没有任何理由,您的问题都是有效的问题。
标签: .net multithreading collections iteration