我正在尝试使用 .NET 4.5 的新正则表达式匹配超时AppDomain.CurrentDomain.SetData
,特别是通过属性的全局变体"REGEX_DEFAULT_MATCH_TIMEOUT"
(将 a 传递TimeSpan
给正则表达式构造函数的变体工作正常)。
当我使用这个 main 方法创建一个新的控制台应用程序时:
static void Main(string[] args)
{
AppDomain.CurrentDomain.SetData("REGEX_DEFAULT_MATCH_TIMEOUT",
TimeSpan.FromSeconds(3));
var m = System.Text.RegularExpressions.Regex.Match(
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "^(x+x+)+y$");
}
它按预期工作:三秒钟后,它抛出一个RegexMatchTimeoutException
.
但是,如果我创建一个空的 MVC 4 应用程序,请添加一个HomeController
和此操作方法:
public ActionResult Index()
{
AppDomain.CurrentDomain.SetData("REGEX_DEFAULT_MATCH_TIMEOUT",
TimeSpan.FromSeconds(3));
var m = System.Text.RegularExpressions.Regex.Match(
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "^(x+x+)+y$");
return View();
}
并且访问http://localhost:XXXXX/
没有抛出异常并且匹配尝试继续。(如果您等待的时间足够长,它最终会完成,然后抱怨缺少视图。不过,这需要很长时间。)
调用's而不是在控制器操作SetData
中调用也不会使超时发生。Global.asax
Application_Start()