我读过这些模式,但发现它不起作用。我收到了一个罕见的例外,即foreach中的某个项目发生了更改。列表的多线程场景
锁(MYLIST) { 的foreach(在myList中VAR一){}
myList中=新列表<>()(或myList.Clear()) }
我也尝试这
的foreach(在myList.ToList VAR一()){}
而这也产生了异常。本主题中描述了一些其他模式,但我想确认/理解为什么上述模式不起作用 我已阅读了一些关于如何正确锁定列表的内容。这种异常并不经常发生 - 很少发生,当时还有内存泄漏。
1. 我是否需要在任何地方使用锁定我修改myList或锁定是否阻止任何人编辑mylist?这可能是混淆的根源。
2.
是否有锁MYLIST和铸造和使用SyncRoot上有区别吗?
这里
Properly locking a List<T> in MultiThreaded Scenarios?
关于1:是的,你需要锁定无论你修改列表甚至读取它。这就是应该如何使用锁。 – ilmiacs
这里有一个伟大的(免费)电子书:['Albahari'](http://www.albahari.com/threading/) –