Long cache refresh with guaranteed response
How do I use this?

I don't understand how to use this.  It took me some time to understand the reason for the getter, and I can't see how to retrieve anything from this cache.

Why do I need to Add the value when I have the delegate?

In the Add method, it doesn't make sense to add provide both a value and a method that calculates the value; it is very likely that someone will pass in inconsistent arguments and get unexpected results.  It should suffice to simply pass in the delegate, and let the value calculate itself.

Why is this static?

It is very dangerous to have one global cache holding every different type.  You should allow for multiple caches for different purposes, and then you can...

Make this cache generic

Nobody likes to cast from Object.  Your interface should be Cacheable&lt;T&gt;, so that we can check at compile time that the type to be returned is what we expect.

Your response is not guaranteed

Your callback is only called after the item has been removed from the cache.  Even if you add the previous value back straight away, a poorly-timed interrupt could have another thread searching for a key in that split-millisecond it's not there.