RazorViewEngine から派生したカスタム カミソリ エンジンで、不安定なコードと思われるものを見つけました。
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);
}
私の懸念は、2 つのリクエストが「同時に」処理されている場合、最初のリクエストは必要に応じて場所の形式を設定しますが、それらを使用する前に、2 番目のスレッド化されたリクエストが場所の形式を別の形式に設定する可能性があることです。仕方。残りは醜くなります。
これは正当な懸念事項ですか?別の言い方をすれば、ASP.NET MVC は、Razor View エンジンが一度に 1 つの要求を処理することを保証しますか? 私はそうではないかと疑っています。
同様に、リクエストごとに 1 つの razor ビュー エンジンオブジェクトがあれば、これで問題ありません。しかし、私もそうではないと思います。
更新 これが競合状態であることを確認しました。また、競合状態なしで問題を解決する動的な拡張カミソリ検索の例を示す記事も見つけました(ただし、キャッシュの問題があるかどうかはまだ疑問です)。