应用程序级缓存对象应该是线程安全的?

时间:2011-10-12 12:36:23

标签: .net asp.net asp.net-mvc thread-safety

我正在考虑使用具有应用程序级别范围的HttpContext.Current.Cache。我知道Cache对象是线程安全的,但是我不理解的是缓存对象不是线程安全的,所以如何安全地使用和修改它们?

3 个答案:

答案 0 :(得分:4)

根据MSDN文章,Cache类型是线程安全的,但缓存not thread safe对象可能会导致意外错误。

这是Thread-safe cache libraries for .NET上的非常好的线程(stackoverflow)和关于对象缓存(Sharepoint)的MSDN文章 - Object Caching Techniques

答案 1 :(得分:1)

您自己有责任确保放置在缓存中的对象是线程安全的。

答案 2 :(得分:0)

如果不同的线程将同时使用和修改缓存的对象,那么您将需要一些应用程序级协议。这可以像lock(cachedObject) {....}

一样简单

如果您可以确定缓存中的某些内容一次只能由一个线程访问,或者无法修改(因为它是不可变的),那么您不需要任何其他内容。

HttpContext.Current.Cache线程安全意味着多线程可以同时获取和放入内容。因此,如果你想在多个键之间进行一些协调,那么你将需要一些更高级别的锁定。