次のコードがあります。
var sequence = from row in CicApplication.DistributorBackpressure44Cache
where row.Coater == this.Coater && row.IsDistributorInUse
select new GenericValue
{
ReadTime = row.CoaterTime.Value,
Value = row.BackpressureLeft
};
this.EvaluateBackpressure(sequence, "BackpressureLeftTarget");
また、DistributorBackpressure44Cache は次のように定義されています。
internal static List<DistributorBackpressure44> DistributorBackpressure44Cache
{
get
{
return _distributorBackpressure44;
}
}
これは、DistributorBackpressure44Cache を 1 つのスレッドで更新し、上記のように別のスレッドからクエリを実行できる、高度にスレッド化されたアプリケーションの一部です。上記の変数 'sequence' は IEnumerable であり、示されているメソッドに渡され、実際に実行される前に他のメソッドに渡される可能性があります。私の懸念はこれです。クエリが実際に実行されたときに DistributorBackpressure44Cache が更新されている (クリアされて再設定されている) 場合、上記のクエリはどうなりますか?
このクエリは実際には後で実行されるため (すぐにリストに変換しない限り)、このコードをロックしても意味がありません。