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 QuartzEjemplo: 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 ServerEjemplo: 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 También en la biblioteca
Procesamiento de JSON en Swift: Codable, JSONSerialization y ejemplos prácticos
Monitoreo de aplicaciones Go (Golang): bibliotecas y herramientas
Clap — potente framework CLI para Rust
Caching en PHP: Redis, Memcached y APCu — guía completa