如何对Azure函数使用自定义计时器?

时间:2019-02-24 20:35:24

标签: c# azure azure-functions

显然,过去曾经有一种方法来创建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中,任何同时具有FunctionNameTimerTrigger且使用自定义计时器类型的函数都将无法生成,并显示如下错误:

  

System.NotImplementedException:Azure函数不支持属性“ TimerTriggerAttribute”上的属性“ ScheduleType”。

这显然曾经有用,但现在不起作用了,我花了一点时间寻找有关现在正确方法的任何相关信息。有人知道设置自定义计时器的新方法是什么吗?

2 个答案:

答案 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)