简介-什么是Quartz.NET?
根据他们的网站:
Quartz.NET是功能齐全的开源作业调度系统,可用于最小的应用程序到大型企业系统。
它是许多ASP.NET开发人员的主要资料,被用作以可靠的群集方式在计时器上运行后台任务的方式。将Quartz.NET与ASP.NET Core一起使用非常相似-Quartz.NET支持.NET Standard 2.0,因此您可以轻松地在应用程序中使用它。
“通用主机”也可以使用这种非HTTP方案,但是由于种种原因,我目前通常不使用那些。希望通过在这些非HTTP方案中进行额外的投资,可以在ASP.NET Core 3.0中改善这一点。
虽然可以创建“定时”后台服务(例如,每10分钟运行一次任务),但Quartz.NET提供了更为强大的解决方案。通过使用Cron触发器,您可以确保任务仅在一天的特定时间(例如,凌晨2:30)运行,或仅在特定的几天运行,或任意组合运行。它还允许您以集群方式运行应用程序的多个实例,以便在任何时候只能运行一个实例。
在本文中,我将介绍创建Quartz.NET作业并将其调度为在托管服务中的计时器上运行的基础知识。
安装Quartz.NET
Quartz.NET是一个.NET Standard 2.0 NuGet软件包,因此应该易于安装在您的应用程序中。对于此测试,我创建了一个ASP.NET Core项目并选择了Empty模板。您可以使用安装Quartz.NET软件包dotnet add package Quartz
。如果您查看该项目的.csproj,它应该看起来像这样:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Quartz" Version="3.0.7" />
</ItemGroup>
</Project>
创建一个IJob
对于我们正在安排的实际后台工作,我们将使用“ hello world”实现,该实现写入并ILogger<>
(进而写入控制台)。您应该实现IJob
包含单个异步Execute()
方法的Quartz接口。请注意,这里我们使用依赖注入将记录器注入到构造函数中。
using Microsoft.Extensions.Logging;
using Quartz;
using System.Threading.Tasks;
[DisallowConcurrentExecution]
public class HelloWorldJob : IJob
{
private readonly ILogger<HelloWorldJob> _logger;
public HelloWorldJob(ILogger<HelloWorldJob> logger)
{
_logger = logger;
}
public Task Execute(IJobExecutionContext context)