Quartz.NET para C# (.NET): Guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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

Recommendations