首页 > 解决方案 > 计时器触发器上的 Azure 函数单例...执行存储过程

问题描述

我们让 Azure Functions 每 2 秒执行一次存储过程。大多数情况下 90% 的时间存储过程将在不到 1 秒的时间内完成。但是如果 json 很大并且有时有很多值,它会运行超过 2 秒。我不希望 Azure 功能在其运行完成之前启动。

    [FunctionName("OrderOIHSync")]
    public static async Task RunSingle([TimerTrigger("*/2 * * * * *")]TimerInfo myTimer, ILogger log)

这是正确的方法还是我可以如何控制,所以在异常情况下,天蓝色函数不会触发。根据文档计时器触发器说单例,但我看到它触发并导致一些数据问题的情况。

任何建议表示赞赏。

标签: azure-functionsazure-function-app

解决方案


如果仍有未完成的调用仍在运行,则计时器触发函数将不会再次触发。有一个内部计时器来跟踪它。在函数被调用时您的函数完成执行后,计时器再次启动。因此,在任何给定时刻,只有一个 Azure 函数实例会运行。

如果您的函数执行时间超过计时器间隔,则在当前调用完成之前不会触发另一个执行。在当前执行完成后安排下一次执行。

在这里检查

现在您可以使用“IsPastDue”属性并相应地控制执行。IsPastDue 标志被传递给您的 azure 函数以指示计时器是否过期

当当前函数调用晚于计划时,IsPastDue 属性为 true。例如,函数应用重新启动可能会导致调用丢失。

从这里引用

{
"Schedule":{
},
"ScheduleStatus": {
    "Last":"2016-10-04T10:15:00+00:00",
    "LastUpdated":"2016-10-04T10:16:00+00:00",
    "Next":"2016-10-04T10:20:00+00:00"
},
"IsPastDue":false

}


推荐阅读