运行 webjob 中发生任何错误或异常时,azure webjobs 的行为如何?

How do azure webjobs behave when any error or exception occurs in running webjob?

如果 运行 webjob 发生任何异常或错误,我想释放所有对象。我怎么知道错误 occurred.Is 是否有任何错误触发器与 webjob 一起工作?

Is there any error trigger working with webjob?

关于ErrorTrigger你可以参考这个wiki。如果需要,您可以发送电子邮件通知,也可以执行您编写的方法。在文档中,您可以找到一些代码示例详细信息。

至于异常,你可以用try catch捕获异常并处理它们。

可以有两种方法来处理这个问题:

1) Try/Catch 方法:- 您可以在 catch 块中触发邮件或任何操作。在 catch 块中,您可以将您收到的异常信息发送到您的邮件帐户,甚至可以写入任何数据库 table 或将其添加到任何队列。

2) 函数过滤器:- 您可以使用具有在任何异常情况下调用的函数异常过滤器属性的用户函数过滤器。您可以在此处找到详细信息:https://github.com/Azure/azure-webjobs-sdk/wiki/Function-Filters

还有一段代码可以参考:

public class ErrorHandlerAttribute : FunctionExceptionFilterAttribute
{

public override async Task OnExceptionAsync(FunctionExceptionContext exceptionContext, CancellationToken cancellationToken)
{
    string body = $"ErrorHandler called. Function '{exceptionContext.FunctionName}': {exceptionContext.FunctionInstanceId} failed. ";
    CombineErrorWithAllInnerExceptions(exceptionContext.Exception, ref body);

    string[] emailList = System.Configuration.ConfigurationManager.AppSettings["SendErrorEmails"].Split(';');

    await SendEmail.SendErrorNotificationAsync("WebJob - Common Driver Error", body);
}

private void CombineErrorWithAllInnerExceptions(Exception ex, ref string error)
{
    error += $"ExceptionMessage: '{ex.Message}'.";
    if (ex is Domain.BadStatusCodeException)
    {
        error += $"Status code: {((Domain.BadStatusCodeException)ex).StatusCode}";
    }

    if (ex.InnerException != null)
    {
        error += $"InnerEx: ";
        CombineErrorWithAllInnerExceptions(ex.InnerException, ref error);
    }
} }    

您可以通过使用 "ErrorHandler" 属性装饰您的方法来调用它。因此,如果出现任何异常,"OnExceptionAsync" 函数将被调用。