このエラーを完全に取り除くラッパーはありますか? 複数のスレッドに複数のループがあり、コレクションが foreach の途中で変更されるかどうかを予測することは不可能です。この特定のエラーをキャッチして、コレクションの新しいハンドラーを取得することで簡単に達成できると思います残りの要素をループしますが、そのような関数でデフォルトの動作をオーバーライドするほど高度ではありません。
質問する
221 次
1 に答える
8
System.Collections.Concurrent
.NET 4 を使用していると仮定すると、 などの のコレクションの 1 つを使用できますConcurrentBag
。ただし、実際には要件を指定していないため、それConcurrentBag
自体が要件を満たすかどうかを判断するのは困難です。
ほとんどのコレクションのスレッド セーフに関するドキュメントを読むと、コレクションがロックなしで別のスレッドによって読み取られている (または変更されている) 間、あるスレッドからの安全な変更をサポートしていないことがわかります。何かによって変更されていない場合は、複数のスレッドから etc を読み取ることは問題ありませんが、単一のスレッドで変更することはできません。List<T>
理想的には、共有コレクションへの自由な書き込みアクセスを必要としないようにコードを設計するようにしてください。ただし、本当に必要な場合は、そのために設計された型を使用してください。
于 2013-06-30T15:15:54.027 に答える