连续WebJob带定时器触发器

Pri*_*ane 11 azure azure-webjobs

我在连续的Web作业中编写了以下函数:

public static void fun1([TimerTrigger("24:00:00", RunOnStartup = true, UseMonitor = true)] TimerInfo timerInfo, TextWriter log)
{//Code}

public static void fun2([TimerTrigger("00:01:00", RunOnStartup = true, UseMonitor = true)] TimerInfo timerInfo, TextWriter log)
{//code}
Run Code Online (Sandbox Code Playgroud)

其中,fun1没有被再次调用(在启动web作业后只调用一次),并且每个进程完成后,fun2将被调用1分钟触发器.

任何人都可以解释为什么?我做错了吗?

Tho*_*mas 34

您应该看一下以下文档TimerTriggerAttribute:

  • 您指定的第一个参数是计划表达式:它可以是6字段crontab表达式或System.TimeSpan.

Cron表达式可以表示为:

*    *    *    *    *    *  command to be executed
?    ?    ?    ?    ?    ?
?    ?    ?    ?    ?    ?
?    ?    ?    ?    ?    ?
?    ?    ?    ?    ?    ?????? day of week (0 - 7) (0 or 7 are Sunday, or    use names)
?    ?    ?    ?    ??????????? month (1 - 12)
?    ?    ?    ???????????????? day of month (1 - 31)
?    |    ????????????????????? hour (0 - 23)
?    ?????????????????????????? min (0 - 59)
??????????????????????????????? second(0 - 59)
Run Code Online (Sandbox Code Playgroud)

在您的情况下,表达式是一个表示TimeSpan的字符串:

  • "24:00:00":此作业每24小时运行一次,RunOnStartup这意味着即使最近24小时内发生了上次运行,作业也将在webjob启动或重新启动时运行.

  • "00:01:00":此作业每分钟运行一次,RunOnStartup这意味着即使最后一次运行发生在最后一分钟,作业也将在webjob启动或重新启动时运行.

编辑

从这个答案:

这是由于TimeSpan.Parse的工作方式.如果你通过它"24:00:00"奇怪,它会给你一个持续24天的TimeSpan.不确定这是他们的预期行为还是他们身边的错误,但我们只是将表达式传递给他们并继承他们的行为.无论如何,为了您的目的,24小时可以使用"1.00:00"(指定1天).

  • 再添加一个你对ASCII架构的所有爱:) (10认同)