我有一个带有 ReadOnlyCollection 的重线程应用程序,如下所示:
internal static ReadOnlyCollection<DistributorBackpressure44> DistributorBackpressure44Cache
{
get
{
return _distributorBackpressure44;
}
set
{
_distributorBackpressure44 = value;
}
}
我在应用程序中有一个地方替换了这个集合(总是在一个单独的线程上),它看起来像这样:
CicApplication.DistributorBackpressure44Cache = new ReadOnlyCollection<DistributorBackpressure44>(someQueryResults.ToList());
我在代码中有很多地方可以访问这个集合,通常是通过 Linq 查询,在许多不同的线程中。代码通常看起来像这样:
foreach (DistributorBackpressure44 distributorBackpressure44 in CicApplication.DistributorBackpressure44Cache.Where(row => row.Coater == coater && row.CoaterTime >= targetTime).ToList())
{
...
...
}
我假设我正在做的是线程安全的,不需要做任何锁定?我不确定的是,如果上面的查询发生在集合被另一个线程替换的完全相同的时间,会发生什么?