Planificador de tareas en C# (.NET): Quartz.NET, Hangfire, Coravel

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Planificador de tareas en C# (.NET): reseña y ejemplos



En el desarrollo moderno con C# (.NET), a menudo surge la necesidad de ejecutar código según un horario: enviar correos electrónicos masivos, actualizar la caché, archivar registros o iniciar procesos ETL. Para ello, existen bibliotecas especializadas: planificadores de tareas (Job Schedulers). En este artículo, analizaremos tres soluciones populares: Quartz.NET, Hangfire y Coravel, y proporcionaremos ejemplos de su uso.



1. Quartz.NET — un planificador potente y flexible



Quartz.NET es un puerto del popular framework Java Quartz. Admite programaciones complejas mediante expresiones cron, persistencia de trabajos en bases de datos, agrupación en clústeres y disparadores.



Instalación

dotnet add package Quartz


Ejemplo: tarea simple con programación cron

using Quartz;using Quartz.Impl;

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

// Configuración del planificadorISchedulerFactory schedulerFactory = new StdSchedulerFactory();IScheduler scheduler = await schedulerFactory.GetScheduler();

// Definimos el trabajoIJobDetail job = JobBuilder.Create<HelloJob>() .WithIdentity("helloJob", "group1") .Build();

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

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


Características:

  • Soporte de expresiones cron (por ejemplo, 0 0 12 * * ? — todos los días al mediodía).
  • Almacenamiento de trabajos en ADO.NET (SQL Server, PostgreSQL, MySQL).
  • Posibilidad de crear/eliminar trabajos dinámicamente.
  • Agrupación en clústeres para alta disponibilidad.


2. Hangfire — simplicidad y panel de control integrado



Hangfire es una biblioteca para ejecutar tareas en segundo plano con una configuración mínima. Proporciona un panel de control web integrado para monitoreo, reintentos automáticos en caso de errores e integración con ASP.NET Core.



Instalación

dotnet add package Hangfiredotnet add package Hangfire.SqlServer # para almacenamiento en SQL Server


Ejemplo: tarea diferida y recurrente

using Hangfire;

// Configuración en Startup.cspublic void ConfigureServices(IServiceCollection services){ services.AddHangfire(config => config.UseSqlServerStorage("connection_string")); services.AddHangfireServer();}

public void Configure(IApplicationBuilder app){ app.UseHangfireDashboard(); // /hangfire // Tarea recurrente: cada 5 minutos RecurringJob.AddOrUpdate( "cleanup-cache", () => Console.WriteLine("Limpiando caché..."), "*/5 * * * *"); // Tarea diferida (dentro de 1 hora) BackgroundJob.Schedule( () => SendEmail("user@example.com"), TimeSpan.FromHours(1));}

public void SendEmail(string email){ Console.WriteLine($"Enviando correo a {email}");}


Ventajas:

  • Panel de control integrado (/hangfire) para ver el estado de las tareas.
  • Reintentos automáticos en caso de fallos.
  • Soporte de colas (por defecto: Redis o SQL Server).
  • Integración sencilla con ASP.NET Core mediante DI.


3. Coravel — planificador ligero para .NET Core



Coravel es una biblioteca minimalista que no requiere dependencias externas (excepto el propio .NET). Es ideal para proyectos pequeños donde no se necesita persistencia.



Instalación

dotnet add                    

Recommendations