[多執行序]不小心被自己蠢到了=>集合已修改; 列舉作業可能尚未執行

摘要:[多執行序]不小心被自己蠢到了=>集合已修改; 列舉作業可能尚未執行

今天用多執行序 碰到=>[集合已修改; 列舉作業可能尚未執行]的問題

因為我的LIST 有定時增加 然後最後不定期掃出來

因此跳出[集合已修改; 列舉作業可能尚未執行]

 

錯沒關係 重點是知道為什麼錯 跟解決方法

網路上找了一下

foreach(x. ToArray())     =>加入 ToArray() 將集合轉換成不會變化陣列就解決了

http://mvc.keigen.net/2013/01/blog-post.html

 

不過感覺對不起自己 於是在尋找正統一點的方式(黑大大)

lock (dict){}

http://blog.darkthread.net/post-2014-04-15-concurrentdictionary.aspx

當然 我是用以後 整個就舒爽起來 畢竟我的只有一個讀一個寫 視需求使用簡單的方式就好了

------------------------------

如果lock要保護的對象是Dictionary<T, T>或List<T>,.NET 4.0開始有更方便的選擇:ConcurrentDictionary<T, T>ConcurrentBag<T>(除此之外System.Collections.Concurrent命名空間還有支援多執行緒存取的Queue、Stack等類別,適用不同場合),內建lock保護機制,能在多執行緒環境執行不出錯,等同Dictionary<T, T>及List<T>的Thread-Safe版本。

附測試ConcurrentDictionary範例:測試ConcurrentDictionary多執行序.rar

來源:http://blog.darkthread.net/post-2014-04-15-concurrentdictionary.aspx