>在WCF
中解决“收集修改”异常>本文研究了常见的“收集已修改;枚举操作可能不会执行”例外,这是在多线程环境中使用集合时经常遇到的,特别是在WCF服务中。
方案和代码崩溃
当收集迭代时,同时修改了集合时会出现异常。 想象一下使用字典跟踪订户的WCF服务。一种方法通过本字典迭代以通知订阅者,但是另一个过程(也许在同一方法中)同时修改字典。这导致例外。>
根本原因分析
SignalData
解决方案:创建一个安全复制
> 解决方案在于在开始迭代之前创建集合的副本。 而不是直接迭代
,而是使用>:>创建一个副本
subscribers.Values
>这在那一刻创建了该系列状态的快照。 对原始字典的修改不会影响此新列表,从而阻止了例外。ToList()
>
<code class="language-csharp">foreach (Subscriber s in subscribers.Values.ToList())</code>摘要
subscribers
以上是如何防止'修改收集”;枚举操作可能不会执行WCF服务中的异常?的详细内容。更多信息请关注PHP中文网其他相关文章!