我已经阅读了这种模式,但发现它不起作用。我得到一个罕见的例外,即 foreach 中的项目已更改。
lock (mylist) { foreach(var a in myList) {}
myList = new List<>() (或 myList.Clear() ) }
我也试过这个
foreach(var a in myList.ToList() ) { }
这也产生了异常。这个线程中描述了一些其他模式,但我想确认/理解为什么上述模式不起作用我已经阅读了一些关于如何正确锁定列表的信息。该异常并不经常发生——只是非常罕见,而且当时还存在内存泄漏。
1. 我是否需要在修改 myList 的任何地方都使用锁,或者锁会阻止任何人编辑 mylist?这可能是混乱的根源。
2.
锁定 mylist 和强制转换以及使用 syncroot 有区别吗?
看这里