[英]ASP.NET MVC Outputcache “thread safe”
我正在使用屬性[OutputCache(Duration=XXX)]
(以及甜甜圈變體[DonutOutputCache(Duration=XXX)]
)。
但是我注意到(由ASP.NET(MVC)輸出緩存和並發請求確認 )這不是線程安全的:當重新生成緩存時,如果控制器方法足夠慢(通常就是這種情況,這就是你緩存的原因)它^^),多個“相同”的請求可以進入操作並執行操作,而不是只處理1個請求,阻止其他請求並從緩存中提供它們。
有沒有辦法輕松制作阻塞/線程安全的OutputCache
屬性? DonutOutputCache
同樣問題? 像[BlockingOutputCache(SameParameters)]
和[BlockingDonutOutputCache(SameParameters)]
注意:緩存的操作是常規操作,返回View(model)
,在操作和視圖中完成繁重的工作(視圖可以執行非常簡單的操作,如@ Model.GetPrice(),這轉換為后端的繁重工作)。
謝謝!
編輯:另一種方法可能是創建[BlockingAction(BlockingParameters)]
屬性,該屬性在未從緩存中提供時阻止對此操作的后續請求。
你可以使用VaryByCustom。 在Global.asax中重寫GetVaryByCustomString方法。 然后創建唯一的緩存鍵,並在緩存存儲上使用雙重檢查鎖定。 這是同步方式。 我可能猜測,當您開始緩存解析然后結束緩存解析時,存在異步方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.