Документация MSDN для FailFast (вторая перегрузка) упоминание:
Немедленно завершает процесс после записи сообщения в журнал событий приложений Windows, а затем включает сообщение и исключение информация в отчете об ошибках в Microsoft.
Мой контекст - это приложение службы Windows, имеющее общий блок try / catch, использующий NLog для регистрации ошибки, а затем вызовите Environment.FailFast (сообщение ex) для принудительного завершения процесса.
Моя цель NLog успешно распечатала исключение, а Windows Event Viewer - нет. У меня есть сообщение и стек вызовов, ведущий к FailFast (куча бесполезного универсального стека Task / MoveNext), но НЕ стек вызовов исключения, переданного в качестве второго параметра.
private static void FailFast(string message, Exception exception)
{
try
{
Log.Fatal(message, exception);
NLog.LogManager.Shutdown();
}
finally
{
if (!Debugger.IsAttached)
Environment.FailFast(message, exception);
}
}
Итак, у меня есть тестфункция, которая генерирует NotSupportedException со строковым тестом и передает «Failed to start» как сообщение в моем блоке try / catch, вызывающее мой метод FailFast.
Что регистрируется в NLog:
Failed to start.
System.NotSupportedException: test
at Application.Host.test()
at Application.Host.<Start>d__5.MoveNext()
Что регистрируется в средстве просмотра событий Windows (не обращайте внимания на строку «test» или функцию test ()):
Application: Application.exe
Framework Version: v4.0.30319
Description: The application requested process termination through System.Environment.FailFast(string message).
Message: Failed to start.
Stack:
at System.Environment.FailFast(System.String, System.Exception)
at Application.FailFast(System.String, System.Exception)
at Application.Host+<Start>d__5.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.__Canon ByRef)
at Application.Host.Start()
at Application.Program+<Main>d__0.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.__Canon ByRef)
at Application.Program.Main(System.String[])
at Application.Program.<Main>(System.String[])