次のように、ReadOnlyCollectionを使用したスレッドの多いアプリケーションがあります。
internal static ReadOnlyCollection<DistributorBackpressure44> DistributorBackpressure44Cache
{
get
{
return _distributorBackpressure44;
}
set
{
_distributorBackpressure44 = value;
}
}
このコレクションが(常に別のスレッドで)置き換えられるアプリ内の場所が1つあり、次のようになります。
CicApplication.DistributorBackpressure44Cache = new ReadOnlyCollection<DistributorBackpressure44>(someQueryResults.ToList());
コード内には、通常はLinqクエリを介して、さまざまなスレッドでこのコレクションにアクセスする場所がたくさんあります。多くの場合、コードは次のようになります。
foreach (DistributorBackpressure44 distributorBackpressure44 in CicApplication.DistributorBackpressure44Cache.Where(row => row.Coater == coater && row.CoaterTime >= targetTime).ToList())
{
...
...
}
私がやっていることは、ロックを行う必要がなく、スレッドセーフだと思いますか?コレクションが別のスレッドで置き換えられるのとまったく同時に発生した場合、上記のクエリで何が起こるかはわかりません。