Errore cache statica
-
05-07-2019 - |
Domanda
Ho una cache statica che a un certo momento aggiorna un elenco generico di oggetti da un database.
È solo un semplice elenco statico:
private static List<myObject> _myObject;
public List<myObject> FillMyObject()
{
if(_myObject == null || myTimer)
_myObject = getfromDataBase();
}
Ho 2 metodi per aggiornare il mio oggetto chiamato UpdateMyObject
e RemoveAnEntryFromMyObject
.
Sembra che tutto vada bene, ma ogni tanto ricevo una grande quantità di errori. Quindi scompare e sembra di nuovo a posto. Qualcuno sa cosa sta succedendo?
Soluzione
Devi utilizzare il lock quando si accede o si aggiorna la cache statica. L'istruzione lock bloccherà l'esecuzione di altri thread fino al termine. In caso contrario, è possibile che un thread tenti di scorrere la raccolta contemporaneamente a un altro thread che rimuove una riga. A seconda del tuo esatto scenario potresti voler utilizzare doppio controllo del blocco .
static readonly object lockObj = new object();
private static List<myObject> _myObject;
public List<myObject> FillMyObject()
{
lock (lockObj)
{
if(_myObject == null || myTimer)
_myObject = getfromDataBase();
}
}
public List<myObject> UpdateMyObject(somevalue)
{
lock (lockObj)
{
_myObject.RemoveAll(delegate(myObject o)
{
return o.somevalue == somevalue;
});)
}
}