我在连续的网络工作中编写了以下功能:
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。
任何人都可以解释原因吗? 我做错了吗?
答案 0 :(得分:30)
您应该查看TimerTriggerAttribute
的文档:
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天)。