我正在处理大量对象及其顺序读取。 我发现这些行中的大多数问题都涉及多线程,但我更关注线程本身由于滥用可分发库而导致的错误。
库中的系统管理可能较大的对象集合,在某一点上,它执行此集合的顺序读取,对每个元素执行操作。 根据可以在库外扩展的元素实现,对象可能会尝试从集合中删除自己。
我希望这是一个选项,但如果在顺序读取集合时发生这种情况,则可能导致错误。我希望能够在读取时锁定集合的内容,并在顺序读取完成后按计划执行任何删除请求。 删除请求必须通过系统,因为对象没有对集合的公共访问权限,我可以使用isReading标志,但我想知道是否有更优雅的结构。
C#或.NET是否提供了执行此操作的工具?也许是为了锁定列表内容,以便在顺序读取期间拦截删除请求?或者我是否必须从头开始为这种情况实施该行为?
答案 0 :(得分:1)
您可能希望在.NET 2.0 +中使用SynchronizedCollection<T>
类。
或者,看一下这个问题的答案:What is the difference between SynchronizedCollection<T> and the other concurrent collections?
答案 1 :(得分: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);
}
}
此代码在修改集合时不会崩溃,并将处理集合的每个项目