我正在尝试分析我的代码中的不安全线程可能会遇到什么问题。
在我的 mvc3 web 应用程序中,我尝试执行以下操作:
// Caching code
public static class CacheExtensions
{
public static T GetOrStore<T>(this Cache cache, string key, Func<T> generator)
{
var result = cache[key];
if(result == null)
{
result = generator();
lock(sync) {
cache[key] = result;
}
}
return (T)result;
}
}
像这样使用缓存:
// Using the cached stuff
public class SectionViewData
{
public IEnumerable<Product> Products {get;set;}
public IEnumerable<SomethingElse> SomethingElse {get;set;}
}
private void Testing()
{
var cachedSection = HttpContext.Current.Cache.GetOrStore("Some Key", 0 => GetSectionViewData());
// Threading problem?
foreach(var product in cachedSection.Products)
{
DosomestuffwithProduct...
}
}
private SectionViewData GetSectionViewData()
{
SectionViewData viewData = new SectionViewData();
viewData.Products = CreateProductList();
viewData.SomethingElse = CreateSomethingElse();
return viewData;
}
我可以用 IEnumerable 运行 inte 问题吗?我对线程问题没有太多经验。如果其他线程将新值添加到缓存中,cachedSection 不会被触及,对吧?对我来说,这行得通!
我应该单独缓存 Products 和 SomethingElse 吗?这会比缓存整个 SectionViewData 更好吗?