天蓝色函数上的TaskCanceledException(服务总线触发器)

时间:2018-07-19 12:54:46

标签: azure azure-functions azureservicebus

我有一个Service Bus Trigger Azure功能,每当一个主题收到一条消息时就会触发该功能。 消息定期发送,例如每30分钟发送一次。在批次之间,没有活动。

该函数没有什么特别的,它通过HttpClient异步发布消息。该函数定期通过TaskCanceledException停止。

HttpClient是静态的

public static class SampleEventTrigger
{
    private static DefaultHttpWebHook webHook = new DefaultHttpWebHook(new Uri("https://nonexistent.invalid/sampleWebHook"), "/event/sampleEvent");

    [FunctionName("SampleEventTrigger")]
    public static async Task Run(
        [ServiceBusTrigger("sampleevent", "SampleEvent.Subs", AccessRights.Manage, Connection = GlobalConfiguration.ServiceBusConnection)]BrokeredMessage message,
        TraceWriter log)
    {
        log.Info("launch sample event subscription");

        try
        {
            var resp = await webHook.Post(message, log);
            log.Info($"{resp.StatusCode}, {resp.ReasonPhrase}");                
        }
        catch (Exception ex)
        {
            log.Error($"exception in webhook: {ex.Message}", ex);
            throw;
        }
    }
}

如果我不久之后再次举起,这次就过去了。 异常来自何处?我们如何避免这种情况? 是与超时有关,还是与启动功能太慢有关?

我的功能处于消耗模式。

1 个答案:

答案 0 :(得分:0)

可能是您的Http呼叫超时了。等待的Http调用超时抛出TaskCanceledException。我不确定您的DefaultHttpWebHook类的内容是什么,但应在Post方法(PostAsync)中使用which itself should have the Async suffix

要验证您可以捕获TaskCanceledException并检查内部异常。如果您仍在挣扎,请在本地开发过程中将代码转换为非异步代码,以更好地处理发生的事情-它会带给您真正的异常,而不是将其作为TCE冒泡。