Colas de tareas en C# (.NET): resumen de bibliotecas e implementaciones

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

Colas de tareas para C# (.NET): desde primitivas básicas hasta soluciones industriales



La organización del procesamiento asíncrono de tareas es una de las tareas clave al desarrollar aplicaciones de alta carga en C#. En el ecosistema .NET existen varios enfoques: desde primitivas de sincronización integradas hasta potentes bibliotecas externas. En este artículo, revisaremos las principales herramientas para trabajar con colas de tareas, sus puntos fuertes y ejemplos de uso.



1. System.Threading.Channels — herramienta integrada de .NET



A partir de .NET Core 2.1, la biblioteca estándar incluye la clase System.Threading.Channels.Channel<T>. Esta es una cola segura para subprocesos, optimizada para escenarios productor-consumidor.



Características principales:

  • Lectura y escritura asíncronas (WriteAsync, ReadAsync)
  • Soporte para colas limitadas e ilimitadas
  • Posibilidad de finalizar la cola para señalar a los consumidores
  • Alto rendimiento sin bloqueos


Ejemplo de uso:

using System.Threading.Channels;

var channel = Channel.CreateBounded<string>(100);

// Productorvar producer = Task.Run(async () =>{ for (int i = 0; i < 10; i++) { await channel.Writer.WriteAsync($"Task {i}"); await Task.Delay(100); } channel.Writer.Complete();});

// Consumidorvar consumer = Task.Run(async () =>{ await foreach (var item in channel.Reader.ReadAllAsync()) { Console.WriteLine($"Processing: {item}"); await Task.Delay(200); }});

await Task.WhenAll(producer, consumer);


Cuándo usarlo: para colas internas en un solo proceso, cuando no se requiere persistencia o procesamiento distribuido.



2. Hangfire — biblioteca avanzada de tareas en segundo plano



Hangfire es una de las bibliotecas más populares para gestionar tareas en segundo plano en .NET. Soporta colas, planificación, reintentos y monitoreo.



Características clave:

  • Persistencia (SQL Server, Redis, PostgreSQL, etc.)
  • Interfaz web para monitoreo
  • Soporte para tareas diferidas y recurrentes
  • Reintentos automáticos en caso de fallos


Ejemplo de configuración y uso:

// Instalación: Install-Package Hangfire// En Startup.cspublic void ConfigureServices(IServiceCollection services){    services.AddHangfire(config =>        config.UseSqlServerStorage(connectionString));    services.AddHangfireServer();}

// Usopublic class EmailService{ public void SendWelcomeEmail(int userId) { // Lógica de envío de email Console.WriteLine($"Sending email to user {userId}"); }}

// Poner tarea en colaBackgroundJob.Enqueue<EmailService>(x => x.SendWelcomeEmail(42));

// Tarea diferidaBackgroundJob.Schedule<EmailService>( x => x.SendWelcomeEmail(43), TimeSpan.FromMinutes(5));


Cuándo usarlo: para aplicaciones web donde se requiere guardar tareas entre reinicios, monitoreo y planificación flexible.



3. RabbitMQ.Client — cola de mensajes distribuida



Para sistemas distribuidos donde varios servicios necesitan intercambiar tareas, se utiliza RabbitMQ. La biblioteca RabbitMQ.Client proporciona acceso completo al protocolo AMQP.



Ejemplo básico productor-consumidor:

using RabbitMQ.Client;using System.Text;

// Productorvar factory = new ConnectionFactory() { HostName = "localhost" };using var connection = factory.CreateConnection();using var channel = connection.CreateModel();

channel.QueueDeclare(queue: "task_queue", durable: true, exclusive

Recommendations