Azure Functions 2.x不断抛出捕获的异常

时间:2019-02-28 05:05:36

标签: c# azure asp.net-core azure-functions asp.net-core-2.1

在我的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(不应抛出任何异常,对吗? )

Printed out, it means the Exception is handled correctly right ?

问题是,即使(我假设)引发的异常然后冒泡冒充到我的try-catch块中,即使我的catch块正在运行以catch格式格式化的异常块,如屏幕截图所示,我的Azure函数继续返回HTTP错误500,并在try-catch块之后跳过了其余代码

我尝试过的

  1. 在Visual Stuido 2017中禁用“仅我的代码”调试选项
  2. 添加AggregateExceptions,在此之前仅捕获Exception
  3. Handle()之前将AggregateException放平

这在本地开发环境中是常见的,还是仅仅是我不正确地处理了所有事情?

此外,输出窗口继续打印出类似这样的内容 Even though being thrown the host is keep running - Part 1 还有这个 Even though being thrown the host is keep running - Part 2 即使处于空闲状态(在不调用HTTP端点的情况下,也只能在调试模式下运行,空闲地等待调用) 这些是我要关注的东西吗?那些甚至和我的问题有关

0 个答案:

没有答案