摘要:[多執行序]不小心被自己蠢到了=>集合已修改; 列舉作業可能尚未執行
今天用多執行序 碰到=>[集合已修改; 列舉作業可能尚未執行]的問題
因為我的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