Planejador de Tarefas em C# (.NET): Quartz.NET, Hangfire e 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

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.Hosting


Exemplo: 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

Recommendations