gpt4 book ai didi

asp.net - 从静态方法读取和写入 ASP.NET 缓存

转载 作者:行者123 更新时间:2023-12-02 16:05:07 26 4
gpt4 key购买 nike

我在名为 helper.getdiscount() 的帮助程序类中有一个静态方法。此类是 ASP.NET 前端代码,由 UI 页面使用。

在此方法中,我检查 ASP.NET 缓存中是否有某些数据,然后返回它,否则它会进行服务调用并将结果存储在缓存中,然后返回该值。

考虑到多个线程可能同时访问它,这会是一个问题吗?

if (HttpContext.Current.Cache["GenRebateDiscountPercentage"] == null)
{
IShoppingService service = ServiceFactory.Instance.GetService<IShoppingService>();
rebateDiscountPercentage= service.GetGenRebateDiscountPercentage().Result;


if (rebateDiscountPercentage > 0)
{
HttpContext.Current.Cache.Add("GenRebateDiscountPercentage", rebateDiscountPercentage, null, DateTime.Now.AddDays(1), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, null);
}
}
else
{
decimal.TryParse(HttpContext.Current.Cache["GenRebateDiscountPercentage"].ToString(), out rebateDiscountPercentage);
}

请告知这是否可以或可以使用任何更好的方法。

最佳答案

尝试使用锁定对象进行类似的操作。

static readonly object objectToBeLocked= new object();

lock( objectToBeLocked)
{
if (HttpContext.Current.Cache["GenRebateDiscountPercentage"] == null)
{
IShoppingService service = ServiceFactory.Instance.GetService<IShoppingService>();
rebateDiscountPercentage= service.GetGenRebateDiscountPercentage().Result;


if (rebateDiscountPercentage > 0)
{
HttpContext.Current.Cache.Add("GenRebateDiscountPercentage", rebateDiscountPercentage, null, DateTime.Now.AddDays(1), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, null);
}
}
else
{
decimal.TryParse(HttpContext.Current.Cache["GenRebateDiscountPercentage"].ToString(), out rebateDiscountPercentage);
}
}

您也可以查看以下线程。

What is the best way to lock cache in asp.net?

关于asp.net - 从静态方法读取和写入 ASP.NET 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17043781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com