ASP.NET MVC输出缓存“线程安全”
本文关键字:线程 安全 线程安全 缓存 NET MVC 输出 ASP | 更新日期: 2023-09-27 18:34:36
>我正在使用属性[OutputCache(Duration=XXX)]
(以及甜甜圈变体[DonutOutputCache(Duration=XXX)]
(。
但是我注意到(由 ASP.NET(MVC(输出缓存和并发请求确认(这不是线程安全的:重新生成缓存时,如果控制器方法足够慢(通常是这种情况,这就是您^^缓存它的原因(,多个"相同"请求可以输入执行操作的操作,而不是只处理一个请求, 阻止其他请求并从缓存中提供它们。
有没有办法轻松地使阻塞/线程安全的OutputCache
属性?同样的问题DonutOutputCache
?喜欢[BlockingOutputCache(SameParameters)]
和[BlockingDonutOutputCache(SameParameters)]
注意:缓存的操作是常规操作,返回View(model)
,在操作和视图中完成繁重的工作(视图可以执行非常简单的操作,例如@Model.GetPrice((,这意味着后端的繁重工作(。
谢谢!
编辑:另一种方法是创建一个[BlockingAction(BlockingParameters)]
属性,该属性将在未从缓存中提供时阻止对此操作的后续请求。
您可以使用
VaryByCustom。在 Global.asax 中,重写 GetVaryByCustomString 方法。然后创建唯一的缓存键,并在缓存存储上使用双重检查锁定。这是同步方式。我可能会猜测当您开始缓存解析然后结束缓存解析时存在异步方式。