gpt4 book ai didi

c# - Razor View 竞争条件

转载 作者:行者123 更新时间:2023-11-30 18:38:50 25 4
gpt4 key购买 nike

在派生自 RazorViewEngine 的自定义 Razor 引擎中,我发现了我认为不稳定的代码:

    public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
ViewLocationFormats = AddViewDynamicFormat(controllerContext, viewName).ToArray();
AreaViewLocationFormats = AddAreaViewDynamicFormat(controllerContext, viewName).ToArray();
return base.FindView(controllerContext, viewName, masterName, useCache);
}

我担心的是,当“同时”处理两个请求时,第一个请求会根据需要设置位置格式,但在它可以使用它们之前——第二个线程请求可能有机会设置位置以不同的方式格式化。其余的变得丑陋。

这是一个合理的担忧吗?换句话说,ASP.NET MVC 是否保证 Razor View 引擎一次只能处理一个请求?我怀疑是这种情况。

同样,如果每个请求有一个 razor View 引擎对象,那么这就没问题了。但我也不认为是这种情况。

更新我已经确认这是一个竞争条件。我还找到了一篇显示 dynamic expansive razor search example 的文章,它在没有竞争条件的情况下解决了问题(尽管我仍然想知道它是否存在缓存问题)。

最佳答案

我几乎肯定 RazorViewEngine 不打算在运行时修改,而只是在 Global.asax Application_Start 中配置。我相信 RazorViewEngine 实例在启动后的应用程序域的生命周期内存在。

如果您需要添加额外的 ViewLocationFormats 或 AreaViewLocationFormats,请在 Application_Start 中进行。 Application_Start 保证每个应用程序域只运行一次。

关于c# - Razor View 竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10887959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com