连续WebJob带定时器触发器

时间:2016-03-25 10:29:00

标签: azure azure-webjobs

我在连续的网络工作中编写了以下功能:

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}

其中,fun1没有被再次调用(仅在启动Web作业后调用一次) 每个进程完成后,以1分钟触发器调用fun2。

任何人都可以解释原因吗? 我做错了吗?

1 个答案:

答案 0 :(得分:30)

您应该查看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)

在这种情况下,表达式是一个代表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天)。