When i cache an object to the HttpContext Cache
, my object disappear on the next read and I must reinsert the object a second time (not always but 90% of the time). After that, the object stay there without any problem.
Here's what happen:
- Start debugging the mvc project
- Read the age from the cache
- The age is null so i put 50 in the variable and then insert it in the cache
- The
CacheItemRemovedCallback
gets executed immediately when the response to the client is done. TheCacheItemRemovedReason
value isRemoved
- The user click refresh immediately
- Read the age from the cache
- The age is still null so i put 50 in the variable and then insert it in the cache
- The user click refresh immediately
- Read the age from the cache
- The age is there finally!
So why the Cache
have this problem to keep the object in cache on the first insert?
This behavior exist in the .Net framework 3.5, 4.0, 4.5, 4.5.2
.
Here's the code:
public class HomeController : Controller
{
public ActionResult Index()
{
int? age = this.HttpContext.Cache.Get("age") as int?;
if (age == null)
{
age = 50;
this.HttpContext.Cache.Add("age", age, null, DateTime.Now.AddHours(5), TimeSpan.Zero, CacheItemPriority.Default, new CacheItemRemovedCallback(this.CacheItemRemovedCallback));
}
return View();
}
public void CacheItemRemovedCallback(String key, Object value, CacheItemRemovedReason reason)
{
}
}