Using 'HttpContext.Current.Cache' safe
Ich benutzeCache
in einer Webdienstmethode wie dieser:
var pblDataList = (List<blabla>)HttpContext.Current.Cache.Get("pblDataList");
if (pblDataList == null)
{
var PBLData = dc.ExecuteQuery<blabla>(@"SELECT blabla");
pblDataList = PBLData.ToList();
HttpContext.Current.Cache.Add("pblDataList", pblDataList, null,
DateTime.Now.Add(new TimeSpan(0, 0, 15)),
Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
}
Aber ich frage mich, ist dieser Code thread-sicher? Die Webservice-Methode wird von mehreren Anforderern aufgerufen. Und mehr als ein Anforderer kann versuchen, Daten abzurufen und zum @ hinzuzufügeCache
zur gleichen Zeit, während der Cache leer ist.
Die Abfrage dauert 5 bis 8 Sekunden. Würde die Einführung einer Lock-Anweisung um diesen Code mögliche Konflikte verhindern? (Ich weiß, dass mehrere Abfragen gleichzeitig ausgeführt werden können, möchte jedoch sicherstellen, dass immer nur eine Abfrage ausgeführt wird.)