显然,过去曾经有一种方法来创建Azure函数的自定义计时器,方法是创建一个继承自TimerSchedule
的类,并在其GetNextOccurrence
方法中定义自定义逻辑。
我们有an MSDN post about it,,我们有a StackOverflow answer about it,甚至还有some official sample code that uses custom timers.
没有一个起作用。
这些示例中没有一个在其函数上具有FunctionName
属性,这是使Azure Function作业实际运行所必需的(至少在当前的SDK版本中;不确定情况已经持续了多长时间)。 。并且在当前的SDK中,任何同时具有FunctionName
和TimerTrigger
且使用自定义计时器类型的函数都将无法生成,并显示如下错误:
System.NotImplementedException:Azure函数不支持属性“ TimerTriggerAttribute”上的属性“ ScheduleType”。
这显然曾经有用,但现在不起作用了,我花了一点时间寻找有关现在正确方法的任何相关信息。有人知道设置自定义计时器的新方法是什么吗?
答案 0 :(得分:2)
不能直接使用计时器来完成。在这里,队列可能是正确的选择:上一次运行将必须创建一条消息并将其发送到队列。确保仅在指定时间后该消息才可见。
一种替代方法是使用持久功能,尤其是“永恒的编排”。请查看官方文档here中的示例,在该示例中,上一份作业在指定的时间后开始执行。
答案 1 :(得分:0)
这些都是与Web作业相关的-Azure Functions不是Web作业。
Azure Webjobs vs Azure Functions : How to choose
说Azure函数确实具有类似的计时器功能-它甚至使用Web作业Nuget程序包。
Timer trigger for Azure Functions
以下示例显示了每次执行的C#函数 分钟的值可以被五整除(例如,如果函数开始 在18:57:00,下一场演出将在19:00:00):
[FunctionName("TimerTriggerCSharp")] public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)