Let me start by saying that I’ve made this mistake on many occasions in the past. I just assume that static/shared objects are thread-safe. Things like HttpContext.Current.Cache…OOPS! A typical implementation of a cache lookup might look like this: Let’s analyze this code in a little detail. Here are the steps performed: Load the object from the Cache If the object is null (not found) Create the object and store it in the cache Return the object back to the caller To start, we should ask, what happens if 10 simultaneous requests come through attempting to get to the cache object?