トラブルシューティング「コレクションが変更されました。列挙操作はWCFでエラーを実行しない場合があります
イライラする「コレクションが変更されました。列挙操作が実行されない場合があります」エラーは、デバッグするとしばしば消え、診断が困難になります。この記事では、特定のWCFサーバーシナリオを検討し、ソリューションを提供しています。
この問題は、辞書を使用してデータイベントサブスクライバーを追跡するために辞書を使用してWindowsサービスで発生します。 クライアントのIDを削除する(unsubscription)により、メソッドがこのエラーをスローすることがあります。
NotifySubscribers
可能性の高い犯人は、
ループ中にサブスクライバー辞書を変更します。 これを解決するには、SignalData
ループを変更することを検討してください:NotifySubscribers
foreach
元のコード:
修正コード:
<code class="language-csharp">foreach(Subscriber s in subscribers.Values)</code>
<code class="language-csharp">foreach(Subscriber s in subscribers.Values.ToList())</code>を使用して
のコピーを作成することにより、列挙はループの開始時に辞書の状態のスナップショットで動作します。 元の辞書のその後の変更は列挙に影響しないため、subscribers.Values
コールバックが問題の原因である場合、エラーが排除されます。 これにより、ループが外部の変更から分離され、スムーズな実行が確保されます。
以上が「コレクションが変更されましたが、列挙操作はWCFのエラーを実行しない場合がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。