Tabla de contenidos
¿Qué rayos es Hangfire y por qué debería importarte?
Hangfire es una librería para .NET que te permite ejecutar tareas en segundo plano de forma fácil, confiable y sin dolor de cabeza.
Es como tener un mayordomo que se encarga de hacer las tareas sucias mientras tu aplicación sigue atendiendo a los usuarios.
Con Hangfire puedes:
- Lanzar tareas una sola vez, de inmediato o con retraso.
- Programar tareas recurrentes tipo cron.
- Encadenar tareas (sí, puedes hacer workflows 😎).
- Ver todo en un dashboard web.
Y lo mejor: sin necesidad de Windows Services, ni procesos externos, ni hacks con Task.Run()
. Solo .NET, un poco de magia y listo.
¿Por qué no simplemente usar un Thread.Sleep()
?
Ah, la vieja confiable. Claro, podrías usar Thread.Sleep()
, Timer
, o incluso un while(true)
con await Task.Delay()
… si lo que quieres es construir una bomba de tiempo en tu app 💣.
¿El problema?
- Bloqueas el hilo y tu app se vuelve una tortuga. 🐢
- No hay control, no hay logs, no hay dashboard.
- No es escalable ni confiable.
- Si el servidor se cae, chao tarea.
¿Ves por qué Hangfire es el camino? 😉
Instalación de Hangfire en 3 minutos (o menos, si tienes café ☕)
- Abre tu terminal o consola del package manager.
- Instala el paquete mágico:
dotnet add package Hangfire
dotnet add package Hangfire.AspNetCore
- (Opcional pero recomendado) Si vas a guardar tareas en base de datos, instala el provider para SQL Server:
dotnet add package Hangfire.SqlServer
Sí, así de fácil. No hay excusa.
Configurando el motor: Startup.cs y lo que no debes olvidar
En tu clase Startup.cs
o donde configures los servicios:
public void ConfigureServices(IServiceCollection services)
{
services.AddHangfire(config =>
config.UseSqlServerStorage("TuConnectionString")); // Usa tu propia connection string
services.AddHangfireServer();
}
Y en el método Configure
:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHangfireDashboard(); // Habilita el dashboard
// Opcional: restringir acceso
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
Authorization = new[] { new MyAuthorizationFilter() }
});
}
Listo, Hangfire está vivo. ⚡
Tipos de tareas que puedes ejecutar (y cómo no romper nada)
🔥 Fire-and-forget
BackgroundJob.Enqueue(() => Console.WriteLine("Hola desde Hangfire!"));
Ejecuta una vez, de inmediato. Ideal para tareas como enviar un email, procesar datos, etc.
⏰ Recurring jobs
RecurringJob.AddOrUpdate(
"job-diario",
() => Console.WriteLine("Ejecutado todos los días"),
Cron.Daily);
Sí, puedes usar expresiones tipo CRON. Y sí, puedes hacer que algo se ejecute cada minuto si eres masoquista.
⌛ Delayed jobs
BackgroundJob.Schedule(
() => Console.WriteLine("Tarea con retraso"),
TimeSpan.FromMinutes(5));
Se ejecuta una vez, pero en el futuro. Como los buenos memes.
🔗 Continuations
var jobId = BackgroundJob.Enqueue(() => Metodo1());
BackgroundJob.ContinueJobWith(jobId, () => Metodo2());
Porque a veces necesitas que una tarea termine para que empiece otra.
Dashboard de Hangfire: el lugar donde todo se ve bonito (hasta que falla 😅)
Accede a http://localhost:5000/hangfire
(o el puerto que uses). Desde ahí puedes:
✅ Ver qué tareas se ejecutaron
🕒 Ver tareas programadas
🛠️ Reintentar errores
🗑️ Borrar jobs fallidos
Es como el «Task Manager» de tus tareas en segundo plano. Y sí, es adictivo.
Ejemplos prácticos que sí funcionan (probados por humanos, no por IA)
Enviar un email
BackgroundJob.Enqueue(() => emailService.Send("hola@tucorreo.com", "¡Hola!", "Mensaje de prueba"));
Procesar una imagen
BackgroundJob.Enqueue(() => imageProcessor.Resize("imagen.jpg"));
Generar reportes diarios
RecurringJob.AddOrUpdate(() => reporteService.Generar(), Cron.Daily);
Errores comunes que todos hemos cometido (y cómo arreglar el desastre)
- ❌ No registraste el servidor de Hangfire (
AddHangfireServer()
) - ❌ Estás usando una base de datos inestable (bye SQLite…)
- ❌ Estás inyectando servicios con
scoped
en un job estático - ❌ Te olvidaste de manejar excepciones en tus métodos
Y sí, todo esto lo aprendí a la mala 😅
Consejillos para producción: Hangfire no es magia, es ingeniería
- Usa un almacenamiento persistente (SQL Server, Redis, etc)
- Protege el dashboard, no dejes
/hangfire
público 🙈 - Usa logs y retries para tareas críticas
- Configura time-outs y excepciones personalizadas
Conclusión: ¿Vale la pena usar Hangfire o sigo con mi script de consola?
Mira… si estás haciendo algo más complejo que un «Hola Mundo«, sí, vale la pena. Hangfire te da:
✅ Simplicidad
✅ Fiabilidad
✅ Dashboard bonito
✅ Escalabilidad
Y todo con una curva de aprendizaje suavecito. Así que ya sabes: ¡pon a Hangfire a trabajar mientras tú tomas un café! ☕