Я пытаюсь использовать .NET 4.5 новое время ожидания регулярного выражения, в частности глобальный вариант через AppDomain.CurrentDomain.SetData
с "REGEX_DEFAULT_MATCH_TIMEOUT"
свойство (вариант, в котором вы передаете TimeSpan
конструктору регулярных выражений, отлично работает).
Когда я создаю новое консольное приложение с помощью этого основного метода:
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/
, никакое исключение не будет выбрано, и попытка совпадения продолжается. (Если вы подождете достаточно долго, он, в конце концов, закончится, а затем пожалуется на отсутствующий вид. Это займет много времени.)
Вызов SetData
в Global.asax
Application_Start()
вместо действия контроллера не делает тайм-аут также.