私の質問は、他の人に確認したいようなものなので、正しい答えが得られたと確信しています. コレクションの列挙など、スレッドセーフでない操作を行う場合、そのコレクションに Synchronized メソッドが存在する場合は、それを呼び出すのが最善の方法です。
例えば:var syncAL = ArrayList.Synchronized( myAL );
そして、心配することなく次のようなことができます:
foreach (var item in syncAL){
// Do something
}
今、私は個人的に ArrayLists を実際には使用していません。これは単なる例でしたが、通常の List の場合、Synchronized メソッドは存在しないため、ここでのベスト プラクティスは次のようになります。
lock (list.SyncRoot){
// non thread-safe operation, e.g:
list.ForEach(item => Console.WriteLine(item.ToString()));
}
もちろん、独自の任意のオブジェクトを作成できますが、複数のクラスでコレクションオブジェクトを使用している場合は、それらすべてのクラスでロックするために同じオブジェクトを使用していることを確認する必要があります。それを行うための非常に快適な方法のように。
チームの開発のヒントとして書いたものを追加する前に、それが本当にベストプラクティスであり、欠けているものがないことを確認したい:)
これについての私の理解の源: MSDN SyncRoot