是否可以为Azure webjob中的各个非触发功能设置单独的计划?我问,因为我有六个单独的任务,我想在一天的不同时间以不同的时间间隔运行,并且不想为每个任务创建一个单独的项目。
答案 0 :(得分:7)
是的,您可以使用TimerTriggerAttribute
以下是示例代码:
public class Program
{
static void Main(string[] args)
{
JobHostConfiguration config = new JobHostConfiguration();
// Add Triggers for Timer Trigger.
config.UseFiles(filesConfig);
config.UseTimers();
JobHost host = new JobHost(config);
host.RunAndBlock();
}
// Function triggered by a timespan schedule every 15 sec.
public static void TimerJob([TimerTrigger("00:00:15")] TimerInfo timerInfo,
TextWriter log)
{
log.WriteLine("1st scheduled job fired!");
}
// Function triggered by a timespan schedule every minute.
public static void TimerJob([TimerTrigger("00:01:00")] TimerInfo timerInfo,
TextWriter log)
{
log.WriteLine("2nd scheduled job fired!");
}
}
您还可以使用CRON表达式指定触发函数的时间:
答案 1 :(得分:0)
您可以编写一个普通的旧控制台应用程序,其循环使用Thread.Sleep()在每次迭代结束时暂停。每次循环唤醒时,它都会检查它在内部保留的调度,并调用当时应该运行的任何函数。该计划可以存储在app.config中,这样您就可以在不重新编译WebJob的情况下进行更改,只需上传一个新的app.config并重新启动它。
或者,如果您愿意,可以省略无限循环并按固定间隔(例如每30分钟)安排WebJob,并在每次运行时检查其内部计划。
答案 2 :(得分:0)
我最终使用Quartz.net连续工作来安排Web作业内部的各种活动。这非常有效。