IRONSOFTWAREHOME
ACTUALIZACIONES PARA DESARROLLADORES

Lista concurrente en C# (Cómo funciona para desarrolladores)

Jacob Mellor, Director de Tecnología @ Team Iron
Jacob Mellor
Updated: 21 de abril de 2026

Si alguna vez has tenido múltiples hilos compitiendo por el acceso a un recurso compartido, sabes que la implementación a prueba de hilos no es un juego. ¡Pero no te preocupes! C# te tiene cubierto con colecciones concurrentes, un poderoso conjunto de clases genéricas de colección a prueba de hilos que aseguran la seguridad de los hilos con estilo y elegancia.

Thread Safety and Concurrent Collections in C#

Comencemos imaginando una intersección de una ciudad bulliciosa sin semáforos. ¡Puedes imaginar el caos! Aprenda a usar colecciones concurrentes en C# para garantizar la seguridad de hilos cuando múltiples hilos acceden a recursos compartidos en escenarios de multithreading. Afortunadamente, en C#, tenemos semáforos para nuestros hilos: estos se llaman colecciones concurrentes. Son clases de colección que permiten que sólo un hilo acceda a un recurso a la vez. Esta seguridad de hilos es crucial al trabajar con múltiples hilos.

Exploring Concurrent Thread Safe Collections in C#

En C#, el espacio de nombres System.Collections.Concurrent tiene una variedad de clases de colecciones concurrentes, como ConcurrentDictionary, ConcurrentQueue, ConcurrentStack, y ConcurrentBag. Estas clases de colección desordenadas proporcionan una versión a prueba de hilos de sus contrapartes no concurrentes. Lo que diferencia a las colecciones concurrentes es que son colecciones concurrentes desordenadas, lo que significa que los elementos no tienen un orden específico. Por ejemplo, con una lista concurrente, no sabes exactamente dónde se inserta un elemento. El enfoque está en asegurar la seguridad de los hilos, no en mantener un orden.

Tomemos un ejemplo de la vida real. Piensa en una publicación de envío de contraseñas en un sitio web. Con una colección concurrente, múltiples usuarios pueden enviar sus contraseñas simultáneamente. Cada acción de 'enviar' es como un hilo, y la colección concurrente asegura que cada envío sea seguro para los hilos, procesado de forma segura y efectiva.

ConcurrentDictionary: Un ejemplo del mundo real

Ahora, exploremos la clase de colección ConcurrentDictionary con un ejemplo de la vida real. Imagina una librería en línea con una función de recomendaciones. Cada clic de un usuario agrega un libro a su lista personal de recomendaciones, representada por un diccionario. A medida que múltiples usuarios navegan y hacen clic en libros al mismo tiempo, tenemos múltiples hilos accediendo al diccionario de manera concurrente.

Un ConcurrentDictionary en C# se vería algo así:

using System.Collections.Concurrent;

ConcurrentDictionary<string, string> recommendedBooks = new ConcurrentDictionary<string, string>();

Para agregar un libro a toda la colección de recomendaciones de un usuario, podríamos usar el método TryAdd:

public void Insert(string user, string book)
{
    // Try to add the book to the user's recommendations
    recommendedBooks.TryAdd(user, book);
}

En este escenario, la clase de colección ConcurrentDictionary asegura que cada clic (o 'hilo') se maneje de manera individual, así que no se mezclan las recomendaciones de dos usuarios. Maneja toda la seguridad de hilos, por lo que no tienes que preocuparte por las carreras de datos y otros problemas de concurrencia relacionados con múltiples hilos.

Implementación de operaciones seguras de subprocesos

Además de TryAdd, las colecciones concurrentes en C# proporcionan una variedad de otras operaciones seguras para hilos como TryRemove y TryUpdate. Estos métodos aseguran que solo un hilo pueda realizar una operación a la vez. Así que, por ejemplo, si quisiéramos eliminar un libro de las recomendaciones de un usuario en el ejemplo anterior, podríamos usar el método TryRemove:

public void RemoveAt(string user)
{
    // Attempt to remove the book for the specified user
    string removedBook;
    recommendedBooks.TryRemove(user, out removedBook);
}

El método TryRemove intentará eliminar el valor de la clave proporcionada (en este caso, un usuario) y ponerlo en la variable removedBook.

Copiado de colecciones concurrentes

Ahora, digamos que quieres copiar tu colección concurrente a un arreglo. Las colecciones concurrentes proporcionan un método CopyTo para este propósito exacto:

public void CopyTo()
{
    // Create an array to hold the recommended books
    string[] bookArray = new string[recommendedBooks.Count];
    
    // Copy the values of the concurrent dictionary to the array
    recommendedBooks.Values.CopyTo(bookArray, 0);
}

Aquí, el método CopyTo copia todos los libros (valores) del diccionario concurrente recommendedBooks en el bookArray.

Recogida segura de hilos

C# también proporciona colecciones seguras para hilos, que están diseñadas para asegurar un acceso seguro a recursos compartidos en entornos multihilo. Estas colecciones, como ConcurrentBag, ConcurrentQueue, y ConcurrentStack, ofrecen implementaciones seguras para hilos donde múltiples hilos pueden acceder y modificar la colección concurrentemente sin causar conflictos o corrupción de datos.

Garantizan consistencia e integridad manejando la sincronización internamente, haciéndolas ideales para escenarios donde una colección desordenada es suficiente, y la seguridad de hilos es de suma importancia en tus aplicaciones C#.

Aprende Más Sobre IronPDF es una popular biblioteca de C# que te permite generar documentos PDF a partir de HTML sin esfuerzo.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

Aunque al principio puede no parecer directamente relacionado con las listas concurrentes, IronPDF puede complementar tus operaciones de colección concurrente proporcionando una manera fácil de crear informes en PDF, registros, o cualquier otro documento que capture los resultados de tu procesamiento concurrente.

Considera el escenario donde tienes una aplicación multihilo que realiza un procesamiento de datos intensivo. A medida que los hilos trabajan su magia en los datos, podrías querer capturar los resultados y generar un informe en PDF para un análisis más profundo o para llevar un registro. Aquí es donde entra en juego IronPDF.

Usar IronPDF es tan simple como agregar la biblioteca a tu proyecto y utilizar su cómodo API. Aquí tienes un ejemplo de cómo puedes integrar IronPDF con tus operaciones de colección concurriente:

using IronPdf;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Threading.Tasks;

// Create a concurrent dictionary to hold your processed data
ConcurrentDictionary<int, string> processedData = new ConcurrentDictionary<int, string>();

// Define your data list (replace with your actual data source)
List<DataItem> dataList = GetDataList();

// Process your data concurrently and store the results in the dictionary
Parallel.ForEach(dataList, (dataItem) =>
{
    // Process each data item and add the result to the dictionary
    string processedResult = ProcessDataItem(dataItem);
    processedData.TryAdd(dataItem.Id, processedResult);
});

// Generate a PDF report with the processed data
var renderer = new ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(BuildHtmlReport(processedData));
pdfDocument.SaveAs("C:\\processed_data_report.pdf");

// Method to retrieve the data list (replace with your actual data source logic)
List<DataItem> GetDataList()
{
    List<DataItem> dataList = new List<DataItem>()
    {
        new DataItem { Id = 1, Name = "Item 1" },
        new DataItem { Id = 2, Name = "Item 2" },
        new DataItem { Id = 3, Name = "Item 3" },
        new DataItem { Id = 4, Name = "Item 4" }
    };
    return dataList;
}

// Method to process each data item and return the result (replace with your actual data processing logic)
string ProcessDataItem(DataItem dataItem)
{
    // Simulating data processing with a delay
    Task.Delay(100).Wait();
    return $"Processed: {dataItem.Name}";
}

// Method to build the HTML report using the processed data (replace with your actual reporting logic)
string BuildHtmlReport(ConcurrentDictionary<int, string> processedData)
{
    string html = "<h1>Processed Data Report</h1><ul>";
    foreach (var kvp in processedData)
    {
        html += $"<li>Item {kvp.Key}: {kvp.Value}</li>";
    }
    html += "</ul>";
    return html;
}

// Placeholder class for your data item (replace with your actual data item class)
public class DataItem
{
    public int Id { get; set; }
    public string Name { get; set; }
    // Add other properties as needed
}

Aquí está la salida del código:

Lista Concurrente en C# (Cómo Funciona para Desarrolladores) Figura 1 - Salida

Conclusión

En conclusión, entender y utilizar colecciones concurrentes de C#, como listas concurrentes, puede mejorar enormemente tu habilidad para manejar escenarios multihilo y asegurar la seguridad de hilos en tus aplicaciones. Con colecciones concurrentes, puedes gestionar recursos compartidos de manera efectiva, previniendo carreras de datos y colisiones entre hilos.

Integrar bibliotecas externas como IronPDF puede aumentar aún más la funcionalidad de colecciones concurrentes permitiendo la generación de informes PDF visualmente atractivos o documentos. IronPDF ofrece una prueba gratuita de su biblioteca para la conversión de HTML a PDF, permitiéndote explorar sus capacidades y opciones de licencia desde $999.

Jacob Mellor, Director de Tecnología @ Team Iron
Director de Tecnología

Jacob Mellor es Director de Tecnología de Iron Software y un ingeniero visionario pionero en la tecnología C# PDF. Como desarrollador original de la base de código principal de Iron Software, ha dado forma a la arquitectura de productos de la empresa desde su creación, transformándola, junto con el director ejecutivo Cameron Rimington, en una empresa de más de 50 personas que presta servicios a la NASA, Tesla y organismos gubernamentales de todo el mundo.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

OR
bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta
Biblioteca C# NuGet para PDF
Instalar con NuGet

Versión: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. En el Explorador de Soluciones, haga clic derecho en Referencias, Administrar Paquetes NuGet
  2. Seleccione Examinar y busque "IronPDF"
  3. Seleccione el paquete e instale
C# PDF DLL
Descargar DLL

Versión: 2026.9

o descargue el Instalador de Windows aquí.

  1. Descargue y descomprima IronPDF en una ubicación como ~/Libs dentro del directorio de su solución
  2. En el Explorador de Soluciones de Visual Studio, haga clic derecho en Referencias. Seleccione Examinar, "IronPDF.dll"

Licencias desde $999