Azure Functions Timer触发线程安全

时间:2018-03-14 15:43:04

标签: azure cron azure-functions

我想知道是否有人知道如果Azure函数上的Cron设置每5分钟运行一次,如果其任务执行时间超过5分钟,会发生什么。它备份了吗?或者我应该实现一个锁定功能,以阻止某些东西(例如循环)处理先前调用已处理的数据?

2 个答案:

答案 0 :(得分:4)

具有计时器触发器的Azure功能一次只能运行一个作业。如果工作需要更长时间,则下一个工作会延迟。

引自Wiki

  

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

即使你向外扩展也是如此。

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer#scale-out

您可能希望确保您的功能不会超时。有关如何配置功能超时的信息,请参阅https://buildazure.com/2017/08/17/azure-functions-extend-execution-timeout-past-5-minutes/

答案 1 :(得分:1)

如果在上一次运行完成之前再次发生计时器触发,它将开始第二次并行执行。

参考:https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference#parallel-execution

当多个触发事件发生的速度快于单线程函数运行时处理它们的速度时,运行时可能会并行调用该函数多次。

还有一点要注意的是,即使使用新的WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT设置,也不能阻止在同一实例上执行多次。

功能应用程序的每个实例,无论该应用程序是在Consumption托管计划上运行还是在常规App Service托管计划上运行,都可以使用多个线程并行处理并发功能调用。

最佳建议是要么通过优化来缩短执行时间,要么更改解决问题的方法。也许将任务分解并以其他方式触发它可能会有所帮助。