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 QuartzExemplo: 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 ServerExemplo: 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 Também na biblioteca
Envio de email em Rust: bibliotecas lettre e mailparse para trabalhar com e-mail
Frameworks CLI para Java: Picocli, JCommander e Spring Shell
Geração de relatórios PDF em C++ com libharu e PoDoFo
Pacotes Spatie para PHP: guia completo com exemplos
Cliente HTTP para Java: as principais bibliotecas para trabalhar com HTTP