>在WCF
中解決“收集修改”異常>本文研究了常見的“收集已修改;枚舉操作可能不會執行”例外,這是在多線程環境中使用集合時經常遇到的,特別是在WCF服務中。
方案和代碼崩潰
當收集迭代時,同時修改了集合時會出現異常。 想像一下使用字典跟踪訂戶的WCF服務。一種方法通過本字典迭代以通知訂閱者,但是另一個過程(也許在同一方法中)同時修改字典。這導致例外。>
根本原因分析
SignalData
解決方案:創建一個安全複製
> 解決方案在於在開始迭代之前創建集合的副本。 而不是直接迭代
,而是使用>:>創建一個副本
subscribers.Values
>這在那一刻創建了該系列狀態的快照。 對原始字典的修改不會影響此新列表,從而阻止了例外。 ToList()
>
foreach (Subscriber s in subscribers.Values.ToList())
subscribers
以上是如何防止'修改收集”;枚舉操作可能不會執行WCF服務中的異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!