超时后可以在WebJob中运行一些代码吗?

时间:2019-07-31 09:30:11

标签: azure-webjobs

我有一个使用ServiceBusTrigger的continueos WebJob。我还设置了10分钟的超时时间。 如果该函数之前完成,它将向另一个队列发送响应。

但是如果超时,它只会退出。达到超时时是否可以运行一些代码?就像一个回调函数。因此,我可以发送适当的消息,表明该进程已超时。

    [Timeout("00:10:00")]
    public static async Task ProcessPreflightQueueMessage([ServiceBusTrigger("%preflightQueue%")] string message, CancellationToken token, ILogger logger)
    { ... }

1 个答案:

答案 0 :(得分:1)

是的,在函数超时的同时,它将抛出TaskCanceledException,您可以捕获它并做您的工作。

这是我的考试。

public class Functions
{
    [Timeout("00:00:30")]
    public static async Task TimeoutJob(
        [QueueTrigger("myqueue")] string message,
        CancellationToken token,
        TextWriter log)
    {

        try
        {
            await log.WriteLineAsync(message);
            log.WriteLine($"-- [{DateTime.Now.ToString()}] Processing Begin --");
            await Task.Delay(TimeSpan.FromMinutes(1), token);
            log.WriteLine($"-- [{DateTime.Now.ToString()}] Complete Time-consuming jobs --");
        }
        catch (TaskCanceledException)
        {
            log.WriteLine("timeout");
        }
        log.WriteLine($"-- [{DateTime.Now.ToString()}] Processing End -- ");
    }

}

enter image description here