C#中的并发集合我正在寻找一种在C#中获取并发集合的方法,或者至少是支持并发枚举器的方法。现在,当我迭代的集合发生变化时,我得到一个InvalidOperationException。我可以深入复制集合并使用私有副本,但我想知道是否有更好的方法我接受了答案,但也发现我需要确保写入集合的代码也需要尝试获取锁。privatevoidaddKillString(Strings){lock(killStrings){killStrings.Add(s);最好的办法不是进行深层复制,而是锁定集合:ListtheList=(List)callingForm.Invoke(callingForm.delegateGetKillStrings);lock(theList.SyncRoot){foreach(stringsintheList){//DosomeJazz}}所以我不太确定你在问什么,但是ParallelExtensions团队已经整理了一些可能符合要求的东西。特别是关于枚举并行集合的博客文章。它还包含一个下载并行CTP的链接,您当然可以浏览其余的博客文章以了解CTP的用途以及编程模型的工作原理。如果您要使用FCL集合,锁定是通过可能重叠多个线程来支持迭代/修改的唯一方法。但是要小心你使用什么作为锁对象。如果集合本身是使用它的类的私有成员,则使用SyncRoot只是一个好主意。如果该集合是受保护的或公共的,那么您的类的客户端可以在您的SyncRoot上锁定自己的锁,这可能会导致您的类中的代码死锁。如果您有兴趣了解第三方集合库,我推荐优秀的C5UniversalCollectionsLibrary。他们有一系列基于树的集合,无需锁定即可轻松安全地修改和迭代-有关详细信息,请参阅其(优秀)文档的第8.10和9.11节。以上就是C#学习教程:C#中的并发集合分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
