Planificador de tareas en C# (.NET): Quartz.NET, Hangfire y Coravel
En las aplicaciones .NET modernas, a menudo es necesario ejecutar código no solo a petición del usuario, sino también según un horario: envío de correos electrónicos masivos, limpieza de bases de datos, generación de informes, sincronización con APIs externas. Para ello se utilizan planificadores de tareas (Job Schedulers). En este artículo, revisaremos tres herramientas populares para C# (.NET): Quartz.NET, Hangfire y Coravel, sus características, ejemplos de código y casos de uso.
¿Por qué necesitas un planificador de tareas en .NET?
Un planificador de tareas permite:
- Ejecutar tareas en segundo plano en un momento específico (por ejemplo, todos los días a las 8:00).
- Repetir tareas con un intervalo definido (cada 5 minutos).
- Procesar colas de tareas sin bloquear el hilo principal de la aplicación.
- Gestionar fácilmente las tareas (agregar, eliminar, pausar).
- Garantizar la tolerancia a fallos (reintentos en caso de errores).
1. Quartz.NET — un planificador potente y flexible
Quartz.NET es un puerto del popular framework Java Quartz para .NET. Admite horarios complejos (expresiones cron), agrupación en clústeres y persistencia de tareas en la base de datos. Es adecuado para proyectos empresariales.
Instalación
dotnet add package Quartzdotnet add package Quartz.Extensions.HostingEjemplo: tarea con horario cron
using Quartz;using Quartz.Impl;using System.Threading.Tasks;
public class EmailJob : IJob{ public async Task Execute(IJobExecutionContext context) { Console.WriteLine($"Enviando correo electrónico a las {DateTime.Now}"); // Lógica de envío de correo await Task.CompletedTask; }}
// Configuración en 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 los días a las 8:00 .Build();
await scheduler.ScheduleJob(job, trigger);Características
- Soporte de expresiones cron (horario flexible).
- Agrupación en clústeres para sistemas distribuidos.
- Persistencia (las tareas se guardan al reiniciar).
- Alto rendimiento para miles de tareas.
2. Hangfire — simplicidad e interfaz de usuario integrada
Hangfire es un planificador con configuración mínima y un panel web integrado para monitorear tareas. Es ideal para proyectos pequeños y medianos donde la integración rápida es importante.
Instalación
dotnet add package Hangfiredotnet add package Hangfire.SqlServer (para almacenamiento en BD)Ejemplo: tarea simple con retardo y repetición
using Hangfire;using Hangfire.SqlServer;
// Configuración en Program.csGlobalConfiguration.Configuration .UseSqlServerStorage("YourConnectionString");
app.UseHangfireServer();app.UseHangfireDashboard(); // Acceso a /hangfire
// Creación de tareaBackgroundJob.Schedule(() => Console.WriteLine("Tarea retrasada"), TimeSpan.FromMinutes(5));RecurringJob.AddOrUpdate("daily-report", () => Console.WriteLine("Informe diario"), Cron.Daily);Características
- Interfaz web integrada para monitoreo (sin dependencias adicionales).
- Soporte de colas, reintentos y tareas retrasadas.
- Fácil integración con ASP.NET Core.
- Almacenamiento de tareas en SQL Server, Redis, PostgreSQL.
3. Coravel — ligero y moderno
Coravel es un planificador minimalista para .NET, inspirado en Laravel. No requiere dependencias externas
También en la biblioteca
Programación reactiva en C# (.NET) — Observable, Rx.NET y LINQ
Geolocalización y mapas en Java: revisión de bibliotecas y herramientas
Programación reactiva en C++: bibliotecas y práctica
Procesamiento de imágenes en C#: cambio de tamaño y recorte (resize, crop)
Trabajo con imágenes: resize y crop en C++ con OpenCV