この質問に対する答えは優れていますが、同時実行のために List.ToArray() の呼び出しをロックで囲む必要があることを意味します。 このブログ投稿は、壊滅的に失敗する可能性があることも示唆しています (ただし、めったにありません)。「コレクションが変更されました。列挙が完了しない可能性があります」例外を回避するために、リストまたはその他のコレクションを列挙するときは、通常、ロックインではなく ToArray を使用します。この回答とブログ投稿は、その仮定に疑問を投げかけています。
List.ToArray() のドキュメントには例外がリストされていないため、(古いデータを使用している可能性がありますが) 常に完了すると常に想定しており、データの一貫性の観点からはスレッドセーフではありませんが、スレッドですコード実行の観点から安全です。つまり、例外をスローせず、呼び出しによって基になるコレクションの内部データ構造が破損することはありません。
この仮定が正しくない場合、問題が発生したことはありませんが、高可用性アプリケーションでは時限爆弾になる可能性があります。決定的な答えは何ですか?