C# System.Web.Caching.Cache是否处理从缓存中清除的对象?

C# System.Web.Caching.Cache是否处理从缓存中清除的对象?,c#,asp.net-mvc,asp.net-mvc-3,caching,thread-safety,C#,Asp.net Mvc,Asp.net Mvc 3,Caching,Thread Safety,背景:我正在编写ASP.NETMVC3Web应用程序。由于方便的自动过期功能和线程安全性,我有一个列表(实际上有几个列表)要保存在缓存中的对象 每个对象内部都包含用于内部服务器推送实现的System.Threading.Semaphore实例 所以我想知道,如果我将对象放入缓存,它们的生命周期会发生什么变化?如果缓存实际处理它清除的对象,这可能会导致线程/NullReferenceExceptions出现问题吗。?也许还有其他明显的理由不这么做 TIA。无论出于何种原因从缓存中弹出对象时,缓存不

背景:我正在编写ASP.NETMVC3Web应用程序。由于方便的自动过期功能和线程安全性,我有一个
列表(实际上有几个列表)要保存在缓存中的对象

每个对象内部都包含用于内部服务器推送实现的
System.Threading.Semaphore
实例

所以我想知道,如果我将对象放入缓存,它们的生命周期会发生什么变化?如果缓存实际处理它清除的对象,这可能会导致线程/NullReferenceExceptions出现问题吗。?也许还有其他明显的理由不这么做


TIA。

无论出于何种原因从缓存中弹出对象时,缓存不会显式地处理对象。您可以通过测试来证明这一点,但如果是这种情况,文档中会有,而不是:

缓存中的对象的生命周期可以通过在缓存中进行扩展,因为缓存中包含对它们的引用。如果要避免这种情况,可以缓存弱引用

如果您这样做,那么将引用存储在缓存中不会影响生命周期


需要考虑的一件事是,你说你想使用缓存,因为它是线程安全的。您应该知道缓存对象本身是线程安全的,但是如果在缓存中缓存非线程安全的对象,则不会使缓存对象本身自动成为线程安全的。具体来说,
List
不是线程安全的,将其存储在缓存中不会改变这一点。如果要确保线程安全,请使用并发集合。

谢谢您的回答!现在我觉得有点舒服了。我不介意延长生命周期-这甚至可以为我的解决方案增加点。如果在最近的将来没有更多的答案出现,我将接受你的答案。应该注意的是,如果需要,你可以通过指定移除回调方法来处理对象。@Rozwel:谢谢,我理解。我只是想确保相反的情况——对象不会被自动删除。@詹姆斯:对于最新的更新:我不打算将列表存储在缓存中——我只想在那里存储单独的对象,这样就可以了。