Planejador de Tarefas em C# (.NET): Quartz.NET, Hangfire e Coravel
Em aplicações .NET modernas, é frequentemente necessário executar código não apenas por solicitação do usuário, mas também de acordo com uma programação: envio de campanhas de e-mail, limpeza de banco de dados, geração de relatórios, sincronização com APIs externas. Para isso, são utilizados planejadores de tarefas (Job Schedulers). Neste artigo, veremos três ferramentas populares para C# (.NET): Quartz.NET, Hangfire e Coravel, suas características, exemplos de código e cenários de uso.
Por que preciso de um planejador de tarefas em .NET?
Um planejador de tarefas permite:
- Executar tarefas em segundo plano em um horário específico (por exemplo, todos os dias às 8:00).
- Repetir tarefas em um intervalo definido (a cada 5 minutos).
- Processar filas de tarefas sem bloquear o fluxo principal da aplicação.
- Gerenciar tarefas facilmente (adicionar, remover, pausar).
- Garantir tolerância a falhas (novas tentativas em caso de erros).
1. Quartz.NET — Planejador Poderoso e Flexível
Quartz.NET é uma adaptação do popular framework Java Quartz para .NET. Ele suporta agendamentos complexos (expressões cron), clusterização, persistência de tarefas em banco de dados. Adequado para projetos empresariais.
Instalação
dotnet add package Quartzdotnet add package Quartz.Extensions.HostingExemplo: tarefa com agendamento cron
using Quartz;using Quartz.Impl;using System.Threading.Tasks;
public class EmailJob : IJob{ public async Task Execute(IJobExecutionContext context) { Console.WriteLine($"Enviando e-mail em {DateTime.Now}"); // Lógica de envio de e-mail await Task.CompletedTask; }}
// Configuração em Program.csvar scheduler = await StdSchedulerFactory.GetDefaultScheduler();await scheduler.Start();
var job = JobBuilder.Create<EmailJob>() .WithIdentity("emailJob", "group1") .Build();
var trigger = TriggerBuilder.Create() .WithIdentity("emailTrigger", "group1") .WithCronSchedule("0 0 8 * * ?") // Todos os dias às 8:00 .Build();
await scheduler.ScheduleJob(job, trigger);Características
- Suporte a expressões cron (agendamento flexível).
- Clusterização para sistemas distribuídos.
- Persistência (tarefas são salvas após reinicialização).
- Alto desempenho para milhares de tarefas.
2. Hangfire — Simplicidade e Interface de Usuário Integrada
Hangfire é um planejador com configuração mínima e um painel web integrado para monitoramento de tarefas. Ideal para projetos pequenos e médios onde a integração rápida é importante.
Instalação
dotnet add package Hangfiredotnet add package Hangfire.SqlServer (para armazenamento em BD)Exemplo: tarefa simples com atraso e repetição
using Hangfire;using Hangfire.SqlServer;
// Configuração em Program.csGlobalConfiguration.Configuration .UseSqlServerStorage("YourConnectionString");
app.UseHangfireServer();app.UseHangfireDashboard(); // Acesso em /hangfire
// Criando tarefaBackgroundJob.Schedule(() => Console.WriteLine("Tarefa agendada"), TimeSpan.FromMinutes(5));RecurringJob.AddOrUpdate("daily-report", () => Console.WriteLine("Relatório diário"), Cron.Daily);Características
- Interface web integrada para monitoramento (sem dependências adicionais).
- Suporte a filas, novas tentativas e tarefas agendadas.
- Fácil integração com ASP.NET Core.
- Armazenamento de tarefas em SQL Server, Redis, PostgreSQL.
3. Coravel — Leve e Moderno
Coravel é um planejador minimalista para .NET, inspirado no Laravel. Não requer dependências externas
Também na biblioteca
Aprendizado de Máquina em PHP: uma visão geral das bibliotecas para ML
Processamento de imagens em Rust: redimensionamento e corte com image e imageproc
Geração de PDF em C++: bibliotecas, ferramentas e exemplos de código
Testes em Swift (iOS/macOS): frameworks e ferramentas