「コレクションの修正:列挙操作が失敗する可能性がある」エラー
のアドレス指定エラー「コレクションが変更されました。列挙操作が実行されない場合があります。「コレクションが反復中に変更されたときに発生し、予測不可能な動作につながります。これは一般に、複数のスレッドが同じコレクションに同時にアクセスして変更されるマルチスレッドシナリオで発生します。 この特定のエラーは、
辞書にアクセスされるメソッドに顕在化します。 この辞書の同時変更(例:クライアントのサブスクリプションや登録解除)は、列挙を無効にします。
NotifySubscribers()
subscribers
ソリューション:スレッドの安全性の実装foreach
辞書の安全性をスレッドすることが重要です。 2つのアプローチをお勧めします:
subscribers
ConcurrentDictionary
反復のコピーを作成する:ConcurrentDictionary<TKey, TValue>
loopの前に、
コードの例:foreach
subscribers
subscribers.Values.ToList()
:
そして、安全なコピーを作成するためにを使用したバージョンがあります:
これらのソリューションのいずれかを実装することにより、スレッドの安全性を確保し、「コレクションが変更された...」エラーを防ぎ、より堅牢で信頼性の高いコードにつながります。以上が「コレクションが変更されましたが、列挙操作はマルチスレッド環境で「エラー」を実行しない場合がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。