Ho appena effettuato il refactoring del codice che gestiva una cache di stato globale di valori che non avevano il blocco per utilizzare il doppio controllo di blocco. Oltre a spostare l'inizializzazione su una singola sorgente (la cache veniva impostata su un metodo di controller), il motivo principale era assicurarsi che solo un thread stesse eseguendo l'inizializzazione alla volta.
La durata della cache è per il tempo di vita dell'applicazione, quindi una volta impostata, dovrebbe andare bene.
Ho bloccato il codice che fa la richiesta web.
Il mio collega, che ha scritto il codice iniziale, ha detto di essere preoccupato per i thread in coda che aspettano perché l'inizializzazione fa una richiesta web, e se la richiesta non riesce, l'ultimo thread deve attendere che tutto il resto passi attraverso quindi potrebbe dover aspettare un po 'e quindi la richiesta dovrebbe essere al di fuori del blocco, ma i miei pensieri sono che una richiesta è costosa e inaffidabile, e dovrebbe essere ridotta al minimo.
Poiché questa cache non scade, non è un grosso problema, ma quali sono i tuoi pensieri? Ho suggerito che se avessimo voluto la soluzione corretta, potremmo testare i blocchi, usando Monitor.TryLock, ecc. Per un blocco più sofisticato, ma probabilmente è eccessivo.