gpt4 book ai didi

c# - ASP.NET MVC 输出缓存 "thread safe"

转载 作者:行者123 更新时间:2023-11-30 17:51:31 26 4
gpt4 key购买 nike

我正在使用属性 [OutputCache(Duration=XXX)](以及 donut 变体 [DonutOutputCache(Duration=XXX)])。

但是我注意到(由 ASP.NET (MVC) Outputcache and concurrent requests 确认)这不是线程安全的:当重新生成缓存时,如果 Controller 方法足够慢(通常情况如此,这就是缓存它的原因 ^^) ,多个“相同”请求可以进入操作并执行操作,而不是只处理 1 个请求,阻止其他请求并从缓存中为它们提供服务。

有什么方法可以轻松制作阻塞/线程安全的 OutputCache 属性? DonutOutputCache 有同样的问题吗?像 [BlockingOutputCache(SameParameters)][BlockingDonutOutputCache(SameParameters)]

注意:缓存的 Action 是常规 Action ,返回View(model),在 Action 和 View 中完成了繁重的工作( View 可以做一些非常简单的事情,比如@Model.GetPrice()这意味着后端的繁重工作)。

谢谢!

编辑:另一种方法可能是创建一个 [BlockingAction(BlockingParameters)] 属性,该属性将在未从缓存提供服务时阻止对此操作的后续请求。

最佳答案

您可以使用 VaryByCustom。在 Global.asax 中覆盖 GetVaryByCustomString 方法。然后创建唯一的缓存键,并在缓存存储上使用双重检查锁定。这是同步方式。我可能猜想当您开始缓存解析然后结束缓存解析时存在异步方式。

关于c# - ASP.NET MVC 输出缓存 "thread safe",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19284750/

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