[英]What happens when an Azure Timer function has an execution duration that's longer shorter than the trigger period?
如果 Azure function 执行了 10 分钟,但有 5 分钟的时间,触发器是否仍会在 5 分钟标记处触发?
回答这个问题最简单的方法是自己测试。
我创建了一个小的 function,它只在执行后等待 90 秒。
计时器设置为每分钟运行一次,因此,测试是查看 function 是否仍然在每分钟执行一次,或者是否延迟了 30 秒。
日志显示你的问题的答案是......不
您可以看到它已将另一个执行排队,因为一旦它完成,它就会再次开始。
您还会看到每次调用的开始时间都延迟了 function 运行所需的额外 30 秒。
这是function...
using System;
public static async Task Run(TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
await Task.Delay(90000);
}
我尝试的解决方法之一是:
在host.json
中,明确给出 function 超时以在本地进行测试:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"functionTimeout": "00:05:00"
}
在 Azure Function 中,每 10 分钟安排一次 Timer 触发:
public void Run([TimerTrigger("0 */10 * * * *")]TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function1 executed at: {DateTime.Now}");
即使在 Azure 云(消费模式)中运行,也没有超时发生,因为计时器仍然每 10 分钟运行一次:
如MS Doc和Azure 博客文章中所述,超时出现在 Azure Function 请求(这意味着您的业务逻辑应该在 function 超时发生之前完成,因此在每个计划中您都可以使用计时器触发器运行相同的逻辑)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.