我有一个saas web应用程序,使用在azure中托管的asp web api。我需要安排一些任务:
生成月度/年度结算
运行重复的sql脚本
通过电子邮件向用户发送每日摘要
关于我如何做到这一点的任何建议或指针?我应该创建另一个应用程序,还是可以在我的web api应用程序中托管它?
答案 0 :(得分:0)
如果您想要一个可靠的任务安排,您可以根据您的选择应用时间间隔,我建议Quartz。 Quartz允许轻松,可管理且无CPU开销添加/编辑/删除/等计划任务。
答案 1 :(得分:0)
如果您想要简单的事情,可以使用System.Timers
。
每小时运行一个示例,报告计时器是否正在滴答(即写入日志文件),如果是时间执行任务则触发任务:
bool ranDailyToday = false;
// Run every hour i.e.
Timer timer = new Timer(60 * 60 * 1000);
timer.Elapsed += OnTick;
timer.Start();
private static void OnTick(object source, ElapsedEventArgs e) {
// report that timer is alive i.e. write into log file
// check if it is time to run and run
if (DateTime.Now.Hour == 12 && ranDailyToday == false) {
RunDailyJob();
}
// etc for monthly and rest...
// don't forget to reset ranDailyToday at new Date
}
private void RunDailyJob() {
// daily job logic
ranDailyToday = true;
}
// etc for monthly and rest...
您可以从应用程序的起点触发启动方法。
实际上在示例中检查今天是否每天运行并不重要,因为计时器只能在一小时内运行一次,但如果设置为10分钟,这将有所帮助。
另外,Quartz似乎也很简单:你可以从here得到一个简单的例子。我刚尝试过,效果很好。
答案 2 :(得分:0)
这就是Azure Web Jobs的用途 - running background tasks。它是运行Web API的Azure Web App的一项功能。您可以使用Azure Scheduler将其设置为计划作业。如何做到这一点也在我提供的链接中。