Hangfire para C# (.NET): guía completa con ejemplos

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

¿Qué es Hangfire y para qué sirve?

\n\n

Hangfire es una potente y popular biblioteca para C# (.NET), diseñada para ejecutar tareas en segundo plano (background jobs). En el desarrollo web moderno, a menudo surge la necesidad de realizar operaciones que no deben bloquear el flujo principal de ejecución de la aplicación. Por ejemplo: envío de notificaciones por correo electrónico, generación de informes, procesamiento de archivos cargados, sincronización de datos con APIs externas, limpieza de registros obsoletos en la base de datos, entre otros.

\n\n

Hangfire proporciona una forma sencilla pero flexible de ejecutar este tipo de tareas. Las características clave de la biblioteca son:

\n
    \n
  • Ejecución de tareas en segundo plano: Las tareas se ejecutan de forma asíncrona, sin bloquear la respuesta al usuario.
  • \n
  • Programación: Se pueden ejecutar tareas según un cronograma (expresiones cron) o con un retraso.
  • \n
  • Confiabilidad: Hangfire guarda la información de las tareas en un almacenamiento persistente (base de datos). Incluso si la aplicación se reinicia, las tareas pendientes se ejecutarán.
  • \n
  • Monitoreo: La interfaz web integrada (Dashboard) permite rastrear el estado de las tareas, ver registros y re-ejecutar tareas fallidas.
  • \n
  • Reintentos: Si una tarea falla, Hangfire intentará ejecutarla nuevamente de forma automática (con una política de reintentos configurable).
  • \n
  • Integración con DI: Se integra fácilmente con contenedores de inyección de dependencias (Dependency Injection) en ASP.NET Core.
  • \n
\n\n

Hangfire admite varios almacenamientos: SQL Server, PostgreSQL, Redis, MongoDB y otros. Esto lo hace adecuado para proyectos de cualquier escala, desde sitios pequeños hasta sistemas corporativos de alta carga.

\n\n

Instalación

\n\n

Hangfire se instala a través del Administrador de Paquetes NuGet. A diferencia de Python, donde se usa pip install, en el ecosistema .NET se usa dotnet add package o el administrador de paquetes de Visual Studio.

\n\n

Para instalar el paquete base de Hangfire, ejecute el siguiente comando en la terminal (en la carpeta raíz de su proyecto):

\n\n
dotnet add package Hangfire
\n\n

Este comando instalará el núcleo de Hangfire y las dependencias para almacenar tareas en memoria (InMemory). Para un entorno de producción, necesitará instalar el paquete para la base de datos específica, por ejemplo:

\n\n
    \n
  • SQL Server: dotnet add package Hangfire.SqlServer
  • \n
  • PostgreSQL: dotnet add package Hangfire.PostgreSql
  • \n
  • Redis: dotnet add package Hangfire.Redis
  • \n
\n\n

Después de instalar los paquetes, es necesario configurar Hangfire en el archivo Program.cs (para ASP.NET Core) o Startup.cs.

\n\n

Inicio rápido

\n\n

Veamos un ejemplo mínimo de configuración y uso de Hangfire en una aplicación ASP.NET Core.

\n\n

Paso 1: Configuración en Program.cs

\n\n
using Hangfire;\nusing Hangfire.SqlServer;\n\nvar builder = WebApplication.CreateBuilder(args);\n\n// Agregar Hangfire con almacenamiento SQL Server\nbuilder.Services.AddHangfire(configuration => configuration\n    .SetDataCompatibilityLevel(CompatibilityLevel.Version_180)\n    .UseSimpleAssemblyNameTypeSerializer()\n    .UseRecommendedSerializerSettings()\n    .UseSqlServerStorage(builder.Configuration.GetConnectionString("HangfireConnection")));\n\n// Agregar el servidor de Hangfire\nbuilder.Services.AddHangfireServer();\n\nvar app = builder.Build();\n\n// Habilitar el Dashboard (panel de monitoreo)\napp.UseHangfireDashboard();\n\n// Ejemplo de una tarea en segundo plano simple\napp.MapGet("/fire-and-forget", () =>\n{\n    var jobId = BackgroundJob.Enqueue(() => Console.WriteLine("¡Hola desde Hangfire!"));\n    return $"La tarea {jobId} ha sido encolada.";\n});\n\napp.Run();
\n\n

Paso 2: Crear una tarea

\n

En el ejemplo anterior, usamos el método <

Recommendations