我讀過這些模式,但發現它不起作用。我收到了一個罕見的例外,即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/) –