gpt4 book ai didi

azure-webjobs - 异步时 Azure WebJob 不会正确失败

转载 作者:行者123 更新时间:2023-12-04 05:47:11 25 4
gpt4 key购买 nike

我开始使用 WebJobs 来处理一些后台任务,但我遇到了关于错误处理和重试的问题。看来,如果我的任何函数是异步的,那么即使我在函数中抛出异常,该函数总是会在仪表板中报告成功。

考虑以下简单示例 ->

    public static void AlwaysFail([QueueTrigger("alwaysfail")] string message)
{
throw new Exception("Induced Error");
}

上面的代码的行为符合我的预期。消息从队列中弹出,抛出异常,WebJobs 仪表板中报告失败,消息被重新排队。这种情况发生了 5 次,然后该消息被存储在毒物队列中。

但是,如果我尝试类似的功能,但让它像下面那样异步 ->

    public async static void AlwaysFail([QueueTrigger("alwaysfail")] string message)
{
throw new Exception("Induced Error");
}

结果不如预期。消息从队列中弹出,抛出异常,但仪表板报告成功并且没有重试。此外,在这些情况下,尽管仪表板报告成功,但异常是用一个超出世界范围的退出代码使进程崩溃,等待 60 秒,然后重新启动,如以下日志所示 ->

[11/11/2014 06:13:35 > 0dc4f9: INFO] Executing: 'Functions.AlwaysFail' because New queue message detected on 'alwaysfail'. [11/11/2014 06:13:36 > 0dc4f9: ERR ] [11/11/2014 06:13:36 > 0dc4f9: ERR ] Unhandled Exception: System.InvalidOperationException: Induced Error [11/11/2014 06:13:36 > 0dc4f9: ERR ] at Plmtc.BackgroundWorker.Functions.d__2.MoveNext() [11/11/2014 06:13:36 > 0dc4f9: ERR ] --- End of stack trace from previous location where exception was thrown --- [11/11/2014 06:13:36 > 0dc4f9: ERR ] at System.Runtime.CompilerServices.AsyncMethodBuilderCore.b__5(Object state) [11/11/2014 06:13:36 > 0dc4f9: ERR ] at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state) [11/11/2014 06:13:36 > 0dc4f9: ERR ] at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) [11/11/2014 06:13:36 > 0dc4f9: ERR ] at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) [11/11/2014 06:13:36 > 0dc4f9: ERR ] at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() [11/11/2014 06:13:36 > 0dc4f9: ERR ] at System.Threading.ThreadPoolWorkQueue.Dispatch() [11/11/2014 06:13:36 > 0dc4f9: ERR ] at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() [11/11/2014 06:13:36 > 0dc4f9: SYS ERR ] Job failed due to exit code -532462766 [11/11/2014 06:13:36 > 0dc4f9: SYS INFO] Process went down, waiting for 60 seconds [11/11/2014 06:13:36 > 0dc4f9: SYS INFO] Status changed to PendingRestart

我可以让仪表板中的异步函数失败的唯一方法是编写一个将 POCO 类作为参数但只在消息中包含一个简单字符串的函数。在这些情况下,在到达任何函数代码之前,在消息/参数绑定(bind)期间发生故障。

有人成功使用异步函数响应队列触发器而没有这些问题吗?

最佳答案

因为方法是 async void,WebJobs SDK 无法等待方法完成。将其更改为返回 Task...

public async static Task AlwaysFail([QueueTrigger("alwaysfail")] string message)
{
throw new Exception("Induced Error");
}

this post了解更多详情。

关于azure-webjobs - 异步时 Azure WebJob 不会正确失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26858897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com