如果我的应用程序中有一个
WebJob
项目,并在 Azure Cloud 中设置 CRON 表达式,如下图所示,那么为什么我需要该包 Quartz.NET
?1。 Quartz.NET 可能存在的缺点
A。我可以将 Quartz.NET 与 Azure 存储队列、表等一起使用吗?如果没有,这将是一个缺点。
b. Quartz.NET 似乎只专注于时间调度。如果我想要一个后台任务不从时间触发器触发,那么 Quartz.NET 没有用?
2。 Quartz.NET 可能的优势
我知道您可以使用 Quartz 创建多个工作。在一个简单的 WebJob 中,我必须为每个作业重复添加 HostedService。
for (int i = 0; i < workerConfiguration.WorkerCount; i++)
{
services.AddHostedService<BackgroundTaskService>();
}
如果您的应用程序中有一个 WebJob 项目,并且您的用例是在 Azure Cloud 中设置 CRON 表达式,那么您可能不需要 Quartz_.NET 包,并且
BackgroundService
类是 .NET Core 框架的一部分,并且提供了一种在托管服务中运行后台任务的方法。
b. Quartz.NET 似乎只专注于时间调度。如果我想要一个后台任务不从时间触发器触发,那么 Quartz.NET 没有用?
a.我可以将 Quartz.NET 与 Azure 存储队列、表等一起使用吗?如果没有,这将是一个缺点。
Quartz.Plugins.AzureTable.AdoJobStore
包将作业数据存储在 Azure 表存储中,也可以使用 Quartz.Plugins.AzureQueue.AdoJobStore
包将作业数据存储在 Azure 存储队列中。使用
IScheduler.ScheduleJob
方法来调度具有不同触发器的多个作业。
这是一个例子:
using Microsoft.Extensions.Hosting;
using Quartz;
using System;
using System.Threading;
using System.Threading.Tasks;
public class QuartzHostedService : IHostedService
{
private readonly IScheduler _scheduler;
public QuartzHostedService(IScheduler scheduler)
{
_scheduler = scheduler;
}
public async Task StartAsync(CancellationToken cancellationToken)
{
await _scheduler.Start(cancellationToken);
// Schedule Job1 every 5 minutes
var job1 = JobBuilder.Create<Job1>()
.WithIdentity("job1", "group1")
.Build();
var trigger1 = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.WithCronSchedule("0 0/5 * * * ?")
.Build();
await _scheduler.ScheduleJob(job1, trigger1, cancellationToken);
// Schedule Job2 every 10 minutes
var job2 = JobBuilder.Create<Job2>()
.WithIdentity("job2", "group1")
.Build();
var trigger2 = TriggerBuilder.Create()
.WithIdentity("trigger2", "group1")
.WithCronSchedule("0 0/10 * * * ?")
.Build();
await _scheduler.ScheduleJob(job2, trigger2, cancellationToken);
}
public async Task StopAsync(CancellationToken cancellationToken)
{
await _scheduler.Shutdown(cancellationToken);
}
}