簡體   English   中英

ASP.NET MVC Outputcache“線程安全”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM