我想通过顺序执行来执行Azure计时器触发器。
假设我有C#定时器触发器,间隔5分钟。但是功能需要时间才能执行8分钟。这意味着在第一次调用完成之前,第二次触发启动另一个线我怎么能避免这个?
答案 0 :(得分:6)
defaut行为是在任何给定时刻,只有Azure函数的一个实例将运行。引自wiki -
如果函数执行时间超过计时器间隔,则在当前调用完成之前,不会触发另一次执行。在当前执行完成后安排下一次执行。
以下是测试功能的日志输出,计划每30秒运行一次,但执行时需要40秒。
C#定时器触发功能在:8/4/2017 2:21:50 PM触发。 C#定时器触发功能执行时间:8/4/2017 2:22:30 PM。执行次数1
C#定时器触发功能在8/4/2017 2:22:30 PM触发。 C#定时器触发功能执行时间:8/4/2017 2:23:10 PM。执行次数2
C#定时器触发功能触发于:2017年8月4日下午2:23:10。 C#定时器触发功能执行时间:8/4/2017 2:23:50 PM。执行次数3
答案 1 :(得分:0)
您可以设置时间触发功能,将消息放入队列,并让另一个功能(队列触发)为队列中的每条消息运行处理。可以限制从队列中提取的消息数量,请在此处查看:Throttling Azure Storage Queue processing in Azure Function App 但是,每5分钟触发8分钟处理听起来像是一个严重的问题。如果它是平均处理时间,请仔细考虑。