在我的Azure Functions 2.x项目中,我有一个Function的一部分,一个try-catch
块,没有finally
,或多或少看起来像这样。
Dictionary<string, int> varDict = null;
Tuple<string, DateTime> varTupl = null;
try
{
varDict = await Core.GetDict(lcLat.Value, lcLong.Value);
varTupl = await Core.GetTupl(lcLat.Value, lcLong.Value);
}
catch (AggregateException ae)
{
ae.Flatten().Handle(ex =>
{
// `log` is an ILogger, the standard Azure Functions passed param
log.LogError(ex, ""); // Writes the ex's error
Debug.WriteLine(""); // Writes the ex's error
// the written content is ommited for readability sake
// But will be shown below
return true;
});
}
catch (Exception ex)
{
// Does exactly like Handle() Does
}
if(varDict != null && varTupl != null)
{
// The Code won't go here, and always return HTTP 500 Instead
}
else
{
// Here neither
}
Run
方法本身是一个async Task<IActionResult>
,其中Core
是一个static public
类,其中包含GetDict()
和GetTupl()
方法,每个方法也是一个static async Task<T>
,其返回类型分别为T
,两者都没有任何try-catch
块,只有using
(不应抛出任何异常,对吗? )
问题是,即使(我假设)引发的异常然后冒泡冒充到我的try-catch
块中,即使我的catch
块正在运行以catch
格式格式化的异常块,如屏幕截图所示,我的Azure函数继续返回HTTP错误500,并在try-catch
块之后跳过了其余代码
我尝试过的
AggregateExceptions
,在此之前仅捕获Exception
Handle()
之前将AggregateException放平这在本地开发环境中是常见的,还是仅仅是我不正确地处理了所有事情?
此外,输出窗口继续打印出类似这样的内容 还有这个 即使处于空闲状态(在不调用HTTP端点的情况下,也只能在调试模式下运行,空闲地等待调用) 这些是我要关注的东西吗?那些甚至和我的问题有关