Quartz.NET para C# (.NET): Guia completo para agendamento de tarefas
Quartz.NET é uma biblioteca de agendamento de tarefas poderosa, flexível e amplamente utilizada, de código aberto, para aplicações .NET. Ela permite que desenvolvedores criem, gerenciem e executem tarefas em segundo plano de acordo com uma programação. Se você precisa executar código em um horário específico, com uma periodicidade definida ou em resposta a algum evento (como cron jobs no Linux), o Quartz.NET é a escolha certa. A biblioteca é uma adaptação do popular framework Java Quartz Scheduler.
Por que ela é necessária? No desenvolvimento moderno, surgem frequentemente tarefas que não devem ser executadas de forma síncrona em resposta a uma solicitação do usuário. Isso pode incluir envio de campanhas de e-mail, limpeza de arquivos temporários, sincronização de dados com APIs externas, geração de relatórios, atualização de cache e muito mais. O Quartz.NET fornece um mecanismo confiável e tolerante a falhas para executar essas tarefas. Ele suporta a persistência do estado das tarefas em banco de dados (JobStore), permitindo que sobrevivam a reinicializações da aplicação, além de suportar clusterização para distribuição de carga.
Ao contrário do uso simples de System.Threading.Timer ou BackgroundService, o Quartz.NET oferece uma API rica para gerenciar o ciclo de vida das tarefas, triggers complexos (diariamente, semanalmente, por expressões CRON), execução paralela, escuta de eventos e muito mais. Isso o torna o padrão de fato para agendamento no ecossistema .NET.
Instalação
O Quartz.NET é distribuído via NuGet. Para instalar, use um dos seguintes comandos no console do gerenciador de pacotes:
# Instalação do pacote principal
dotnet add package Quartz
# Se precisar de suporte para configuração XML
dotnet add package Quartz.Plugins
# Para usar com Dependency Injection (recomendado para ASP.NET Core)
dotnet add package Quartz.Extensions.Hosting
Para .NET Framework clássico (ex: .NET 4.8), use o console NuGet:
Install-Package Quartz
Início rápido: Exemplo mínimo funcional
Vamos criar um aplicativo de console simples que exibirá "Olá, Quartz!" a cada 5 segundos.
using System;
using System.Threading.Tasks;
using Quartz;
using Quartz.Impl;
namespace QuartzQuickStart
{
// 1. Criando o Job (tarefa)
public class HelloJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await Console.Out.WriteLineAsync($"Olá, Quartz! Hora: {DateTime.Now:HH:mm:ss}");
}
}
class Program
{
static async Task Main(string[] args)
{
// 2. Criando a fábrica do agendador
StdSchedulerFactory factory = new StdSchedulerFactory();
// 3. Obtendo o agendador
IScheduler scheduler = await factory.GetScheduler();
// 4. Iniciando o agendador
await scheduler.Start();
// 5. Definindo o Job (tarefa)
IJobDetail job = JobBuilder.Create()
.WithIdentity("meuJob", "grupo1")
.Build();
// 6. Definindo o Trigger (agendamento)
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("meuTrigger", "grupo1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(5)
.RepeatForever())
.Build();
// 7. Registrando o Job e o Trigger no agendador
await scheduler.ScheduleJob(job, trigger);
// 8. Aguardando para que o console não feche
await Task.Delay(TimeSpan.FromSeconds(30));
// 9. Parando o agendador
await scheduler.Shutdown();
}
}
}
Principais classes, métodos e interfaces
Também na biblioteca
Integração de métricas Prometheus em C++: biblioteca prometheus-cpp
Geolocalização e Mapas em TypeScript: bibliotecas e exemplos práticos
Trabalhando com XML em Rust: bibliotecas roxmltree, quick-xml e serde-xml-rs
Geolocalização e Mapas em Java: Bibliotecas, APIs e Exemplos de Código