我正在使用属性[OutputCache(Duration=XXX)]
(以及甜甜圈变体[DonutOutputCache(Duration=XXX)]
)。
但是我注意到(由ASP.NET (MVC) Outputcache 和并发请求确认)这不是线程安全的:当重新生成缓存时,如果控制器方法足够慢(通常是这种情况,这就是你缓存的原因它^^),多个“相同”的请求可以输入操作并执行操作,而不是只处理一个请求,阻止其他请求并从缓存中提供它们。
有什么方法可以轻松创建阻塞/线程安全OutputCache
属性?同样的问题DonutOutputCache
?喜欢[BlockingOutputCache(SameParameters)]
和[BlockingDonutOutputCache(SameParameters)]
注意:缓存的动作是常规动作,返回View(model)
,在动作和视图中完成繁重的工作(视图可以做一些非常简单的事情,例如 @Model.GetPrice() ,它转化为后端的繁重工作)。
谢谢!
编辑:另一种方法可能是创建一个[BlockingAction(BlockingParameters)]
属性,当没有从缓存中提供服务时,该属性将阻止对该操作的后续请求。