我的问题更像是我想与其他人确认的问题,所以我确信我得到了正确的答案。当您想要进行非线程安全操作(例如枚举集合)时,最好的办法是调用 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()));
}
因为当然你可以创建你自己的任意对象,但是如果你在多个类中使用一些集合对象,你需要确保你使用同一个对象来锁定所有这些类,这似乎喜欢一种非常舒适的方式。
我想确保它确实是最佳实践,并且在添加我写的内容作为我的团队的开发技巧之前我没有遗漏任何东西:)
我对此的理解来源: MSDN SyncRoot