1

我正在处理大量对象和对它们的顺序读取。我发现大多数问题都与多线程有关,但我更关心线程本身由于滥用可分发库而导致的错误。

库中的系统管理一个可能很大的对象集合,在某一时刻,它会对该集合执行顺序读取,并对每个元素执行操作。根据可以在库之外扩展的元素实现,对象可能会尝试将其自身从集合中移除。

我希望这是一个选项,但是如果在按顺序读取集合时发生这种情况,这可能会导致错误。我希望能够在读取集合的内容时锁定它,并将任何删除请求放在一个计划中,以便在顺序读取完成后执行。删除请求必须通过系统,因为对象没有对集合的公共访问权限,我可以只使用 isReading 标志,但我想知道是否有更优雅的构造。

C# 或 .NET 是否提供了执行此操作的工具?也许锁定列表内容,以便我可以在顺序读取期间拦截删除请求?还是我必须为这种情况从头开始实施该行为?

4

2 回答 2

1

您可能想研究SynchronizedCollection<T>在 .NET 2.0+ 中使用该类。

或者,看看这个问题的答案:SynchronizedCollection<T> 和其他并发集合有什么区别?

于 2012-09-10T00:13:38.267 回答
0

你可以使用下一个技巧

List<T> collection;

for(int index = collection; index >= 0; --index)
{
  var item = collection[index];

  if(MUST BE DELETED)
  {
    collection.RemoveAt(index); // this is faster
    OR
    collection.Remove(item);
  }
}

此代码不会在修改集合时崩溃,并将处理集合的每个项目

于 2012-09-10T01:38:33.657 回答