Agendador de Tarefas em C# (.NET): Quartz.NET, Hangfire, Coravel

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

Agendador de Tarefas em C# (.NET): visão geral e exemplos



No desenvolvimento moderno em C# (.NET), surge frequentemente a necessidade de executar código em horários agendados: enviar newsletters por e-mail, atualizar cache, arquivar logs ou iniciar processos ETL. Para isso, existem bibliotecas especializadas — agendadores de tarefas (Job Schedulers). Neste artigo, veremos três soluções populares: Quartz.NET, Hangfire e Coravel, além de apresentar exemplos de uso.



1. Quartz.NET — agendador poderoso e flexível



Quartz.NET é uma adaptação do popular framework Java Quartz. Ele suporta agendamentos complexos usando expressões cron, persistência de tarefas em banco de dados, clustering e triggers.



Instalação

dotnet add package Quartz


Exemplo: tarefa simples com agendamento cron

using Quartz;using Quartz.Impl;

public class HelloJob : IJob{ public async Task Execute(IJobExecutionContext context) { Console.WriteLine($"Olá! Hora: {DateTime.Now}"); }}

// Configuração do agendadorISchedulerFactory schedulerFactory = new StdSchedulerFactory();IScheduler scheduler = await schedulerFactory.GetScheduler();

// Definindo a tarefaIJobDetail job = JobBuilder.Create<HelloJob>() .WithIdentity("helloJob", "group1") .Build();

// Trigger: a cada 10 segundosITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule("0/10 * * * * ?") // a cada 10 segundos .ForJob(job) .Build();

await scheduler.ScheduleJob(job, trigger);await scheduler.Start();


Características:

  • Suporte a expressões cron (ex.: 0 0 12 * * ? — todos os dias ao meio-dia).
  • Armazenamento de tarefas em ADO.NET (SQL Server, PostgreSQL, MySQL).
  • Possibilidade de criar/excluir tarefas dinamicamente.
  • Clustering para alta disponibilidade.


2. Hangfire — simplicidade e painel integrado



Hangfire é uma biblioteca para execução de tarefas em segundo plano com configuração mínima. Ela oferece um painel web integrado para monitoramento, tentativas automáticas em caso de erros e integração com ASP.NET Core.



Instalação

dotnet add package Hangfiredotnet add package Hangfire.SqlServer # para armazenamento em SQL Server


Exemplo: tarefa atrasada e recorrente

using Hangfire;

// Configuração em Startup.cspublic void ConfigureServices(IServiceCollection services){ services.AddHangfire(config => config.UseSqlServerStorage("connection_string")); services.AddHangfireServer();}

public void Configure(IApplicationBuilder app){ app.UseHangfireDashboard(); // /hangfire // Tarefa recorrente: a cada 5 minutos RecurringJob.AddOrUpdate( "cleanup-cache", () => Console.WriteLine("Limpando cache..."), "*/5 * * * *"); // Tarefa atrasada (após 1 hora) BackgroundJob.Schedule( () => SendEmail("user@example.com"), TimeSpan.FromHours(1));}

public void SendEmail(string email){ Console.WriteLine($"Enviando e-mail para {email}");}


Vantagens:

  • Painel integrado (/hangfire) para visualizar o status das tarefas.
  • Repetições automáticas em caso de falhas.
  • Suporte a filas (padrão — Redis ou SQL Server).
  • Integração simples com ASP.NET Core via DI.


3. Coravel — agendador leve para .NET Core



Coravel é uma biblioteca minimalista que não requer dependências externas (além do próprio .NET). É ideal para projetos pequenos onde a persistência não é necessária.



Instalação

dotnet add                    

Recommendations