Here’s the basic pattern:
- Check the cache for the value, return if its available
- If the value is not in the cache, then implement a lock
- Inside the lock, check the cache again, you might have been blocked
- Perform the value look up and cache it
- Release the lock
In code, it looks like this:
private static object ThisLock = new object();
public string GetFoo()
{
// try to pull from cache here
lock (ThisLock)
{
// cache was empty before we got the lock, check again inside the lock
// cache is still empty, so retreive the value here
// store the value in the cache here
}
// return the cached value here
}