Simplification — I've created an empty AWS Lambda project with .net CORE :
这是默认的空lambda函数项目:
我想全局捕获应用程序中的所有异常。
所以我创建了一个生成异常的方法,并添加了一个全局应用程序处理程序:
完整代码:
public class Function
{
void CreateException()
{
var z = 0;
var a = 2 / z;
Console.Write(a);
}
public Function()
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}
public void FunctionHandler(object input, ILambdaContext context)
{
CreateException();
}
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
// � It never gets here
}
}
问题是引发了异常,但从未触发CurrentDomain_UnhandledException
问题:
这是捕获全局异常的正确方法吗?以及为什么在发生未处理的异常时不调用CurrentDomain_UnhandledException
?
答案 0 :(得分:2)
虽然我无法回答为何无法解决问题,但我可以告诉您我已经作为解决方法完成了。
我使用的解决方法是将我的 FunctionHandler 包装在try / catch中。由于这是lambda函数中唯一的入口点,因此任何抛出在这里的东西都会被捕获……就我的目的而言,它的作用就像是全局处理程序。
public void FunctionHandler(object input, ILambdaContext context)
{
try
{
CreateException();
}
catch (Exception e)
{
// Handle your 'uncaught' exceptions here and/or rethrow if needed
Console.WriteLine(e);
throw;
}
}
您可能希望重新投掷,以便: