C#使用集合时线程安全的最佳实践(已经不是并发)
我的问题更像是我想与其他人确认的事情,所以我确信我得到了正确的答案.
如果要进行非线程安全操作(例如枚举集合),最好的方法是调用Synchronized方法(如果该集合存在). 例如:var syncAL = ArrayList.Synchronized(myAL); 然后你可以做一些无忧无虑的事情: foreach (var item in syncAL){ // Do something } 现在我个人并不真正使用ArrayLists,它只是用于示例,但对于常规List,Synchronized方法不存在,所以这里最好的做法是: lock (list.SyncRoot){ // non thread-safe operation,e.g: list.ForEach(item => Console.WriteLine(item.ToString())); } 因为你当然可以创建自己的任意对象,但如果你在多个类中使用一些集合对象,你需要确保你使用相同的对象来锁定所有这些类,这似乎就像一个非常舒适的方式. 我想确保它真的是最好的做法,在我添加我为团队编写的开发提示之前,我没有遗漏任何东西:) 我对此的理解来源: 解决方法
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |