达到超时后,我可以 运行 WebJob 中的一些代码吗?

Can I run some code in a WebJob after the timeout has been reached?

我有一个使用 ServiceBusTrigger 的连续 WebJob。我还设置了 10 分钟的超时。 如果函数在此之前完成,它会将响应发送到另一个队列。

但如果超时,它就会退出。达到超时时是否可以 运行 一些代码?就像一个回调函数。所以我可以发送一个进程超时的正确消息。

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

是的,你可以,当函数超时时,它会抛出 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 -- ");
    }

}