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)]属性,该属性将在未从缓存中提供时阻止对此操作的后续请求。

ASP.NET MVC输出缓存“线程安全”

您可以使用

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