wcf
の「コレクション修正」例外に対処します この記事では、一般的な「コレクションが変更されました。列挙操作が実行されない場合があります」という例外があります。これは、特にWCFサービス内でマルチスレッド環境でコレクションを操作するときに頻繁に遭遇する場合があります。 シナリオとコードの内訳は、コレクションが同時に変更されている間にコレクションが反復されたときに発生します。 辞書を使用してサブスクライバーを追跡するWCFサービスを想像してください。この辞書を繰り返してサブスクライバーに通知しますが、別のプロセス(おそらく同じ方法内)は辞書を同時に変更します。これは例外につながります。
根本原因分析問題は、反復中のサブスクライバー辞書の同時変更に起因します。 たとえば、
メソッドが反復ループ内のサブスクライバーを削除または更新すると、コレクションの構造が変更され、例外が発生します。SignalData
ソリューション:安全なコピーを作成しますソリューションは、反復を開始する前にコレクションのコピーを作成することにあります。
:を使用してコピーを直接反復する代わりに、
これにより、その瞬間にコレクションの状態のスナップショットが作成されます。 オリジナルの辞書の変更は、この新しいリストに影響を与えず、例外を防ぎます。
概要subscribers.Values
ToList()
以上が「コレクションが変更された、列挙操作はWCFサービスの例外を実行しない場合がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。