Cómo usar asincronicidad y multithreading en códigos de barras usando C#

Cómo usar Async y Multithread en C# con IronBarcode

This article was translated from English: Does it need improvement?
Translated
View the article in English

Los términos Async y Multithreading a menudo se confunden. Ambos métodos buscan mejorar el rendimiento y la eficiencia del programa optimizando la utilización de recursos del sistema y reduciendo el tiempo de ejecución. Sin embargo, difieren en el enfoque, los mecanismos y los casos de uso previstos. IronBarcode admite ambos enfoques. Este artículo explora las diferencias entre ellos y cómo implementarlos usando IronBarcode.

Inicio rápido: Ejemplo de lectura de código de barras asíncrona y multihilo

Use este ejemplo de una línea para comenzar instantáneamente con IronBarcode. Muestra lo fácil que es combinar las opciones de lectura asincrónica y multihilo para escanear múltiples imágenes de código de barras en paralelo con una configuración mínima.

Nuget IconEmpieza a crear PDF con NuGet ahora:

  1. Instalar IronBarcode con el gestor de paquetes NuGet

    PM > Install-Package BarCode

  2. Copie y ejecute este fragmento de código.

    var results = await IronBarCode.BarcodeReader.ReadAsync(imagePaths, new IronBarCode.BarcodeReaderOptions { Multithreaded = true, MaxParallelThreads = 4, ExpectMultipleBarcodes = true });
  3. Despliegue para probar en su entorno real

    Empieza a utilizar IronBarcode en tu proyecto hoy mismo con una prueba gratuita
    arrow pointer


Ejemplo de lectura asincrónica de códigos de barras

Comencemos entendiendo qué es la lectura asincrónica y cómo beneficia a los usuarios. La lectura asincrónica permite que las operaciones largas o bloqueantes se realicen sin bloquear la ejecución del hilo principal. En C#, los usuarios pueden utilizar las palabras clave async y await con métodos que admiten características asincrónicas. Esto no creará hilos adicionales, sino que liberará el hilo actual. Si bien el hilo principal todavía es necesario para iniciar y administrar tareas, no necesita estar exclusivamente dedicado a una sola tarea. El hilo principal se convoca cuando el método asincrónico requiere su participación, liberándolo para manejar otras tareas cuando no es necesario, como tareas dependientes de I/O como leer/escribir archivos o realizar solicitudes de red.

Consideremos la lectura de códigos de barras como un ejemplo. En este escenario, los pasos involucrados serían:

  • Leer el archivo
  • Aplicar opciones de lectura
  • Decodificar el código de barras

Durante el paso de 'Leer el archivo', la tarea principal puede ser liberada.

Utilice los métodos ReadAsync y ReadPdfAsync para leer códigos de barras asincrónicamente para imágenes y documentos PDF, respectivamente.

:path=/static-assets/barcode/content-code-examples/how-to/async-multithread-async.cs
using IronBarCode;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

List<string> imagePaths = new List<string>() { "image1.png", "image2.png" };

// Barcode reading options
BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    ExpectMultipleBarcodes = true
};

// Read barcode using Async
BarcodeResults asyncResult = await BarcodeReader.ReadAsync(imagePaths, options);

// Print the results to console
foreach (var result in asyncResult)
{
    Console.WriteLine(result.ToString());
}
Imports IronBarCode
Imports System
Imports System.Collections.Generic
Imports System.Threading.Tasks

Private imagePaths As New List(Of String)() From {"image1.png", "image2.png"}

' Barcode reading options
Private options As New BarcodeReaderOptions() With {.ExpectMultipleBarcodes = True}

' Read barcode using Async
Private asyncResult As BarcodeResults = await BarcodeReader.ReadAsync(imagePaths, options)

' Print the results to console
For Each result In asyncResult
	Console.WriteLine(result.ToString())
Next result
$vbLabelText   $csharpLabel

En el fragmento de código anterior, hemos instanciado una lista de rutas de imágenes para ser leídas asincrónicamente por IronBarcode. Para leer las imágenes, puede usar el método ReadAsync de la clase BarcodeReader. Los usuarios pueden especificar las imagePaths así como las opciones de lectura.

Este método para operaciones asincrónicas también está disponible para leer códigos de barras en documentos PDF, conocido como ReadPdfAsync, que forma parte de la misma clase.

Ejemplo de lectura de códigos de barras en multiproceso

A diferencia de las operaciones asincrónicas, el multihilo permite que un único proceso se ejecute en múltiples hilos simultáneamente. Esto significa que, en lugar de ejecutar un proceso secuencialmente en un solo hilo, el multihilo divide las tareas entre varios hilos, permitiendo la ejecución concurrente. Sin embargo, para que el multihilo funcione, una máquina debe tener múltiples núcleos de CPU, ya que estos núcleos se utilizan para ejecutar los hilos de forma independiente. Similar a las operaciones asincrónicas, el multihilo busca mejorar el rendimiento y la capacidad de respuesta de las aplicaciones.

En IronBarcode, active el multihilo configurando la propiedad Multithreaded y especificando los núcleos máximos para ejecución concurrente utilizando MaxParallelThreads en BarcodeReaderOptions. El valor predeterminado para MaxParallelThreads es 4, que se puede ajustar según los núcleos de CPU disponibles.

Por favor notaPara encontrar núcleos disponibles: Administrador de tareas -> Pestaña Rendimiento -> Haga clic en CPU. El campo 'Núcleos' muestra el recuento.@@--CIERRE DE SOPORTE--@@

:path=/static-assets/barcode/content-code-examples/how-to/async-multithread-multithread.cs
using IronBarCode;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

List<string> imagePaths = new List<string>(){"test1.jpg", "test2.png"};

// Barcode reading options
BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    Multithreaded = true,
    MaxParallelThreads = 4,
    ExpectMultipleBarcodes = true
};

// Read barcode with multithreaded enabled
BarcodeResults results = BarcodeReader.Read(imagePaths, options);

// Print the results to console
foreach (var result in results)
{
    Console.WriteLine(result.ToString());
}
Imports IronBarCode
Imports System
Imports System.Collections.Generic
Imports System.Threading.Tasks

Private imagePaths As New List(Of String)() From {"test1.jpg", "test2.png"}

' Barcode reading options
Private options As New BarcodeReaderOptions() With {
	.Multithreaded = True,
	.MaxParallelThreads = 4,
	.ExpectMultipleBarcodes = True
}

' Read barcode with multithreaded enabled
Private results As BarcodeResults = BarcodeReader.Read(imagePaths, options)

' Print the results to console
For Each result In results
	Console.WriteLine(result.ToString())
Next result
$vbLabelText   $csharpLabel

Comparación de rendimiento

Ahora, leamos las dos imágenes a continuación y comparemos el tiempo de lectura de operaciones normales, asincrónicas y multihilos.

Imagen de muestra

Imagen 1
Imagen 2
Lectura normal Lectura asincrónica Lectura multiproceso (4 núcleos)
01,75 segundos 01,67 segundos 01,17 segundos

De la tabla de comparación, es evidente que hay un aumento significativo en el rendimiento una vez que se implementa la lectura asincrónica y multihilo. Sin embargo, estas dos operaciones sirven para propósitos y enfoques diferentes. Por lo tanto, los usuarios deben determinar qué enfoque se adapta mejor a la aplicación que están construyendo.

Finalmente, puede haber situaciones en las que múltiples códigos de barras estén presentes en un único documento. Para más información, visite la guía Leer Múltiples Códigos de Barra.

Preguntas Frecuentes

¿Cómo puedo implementar la lectura asincrónica de códigos de barras en C#?

Puedes implementar la lectura de códigos de barras asíncrona en C# utilizando los métodos ReadAsync y ReadPdfAsync de IronBarcode. Estos métodos permiten la lectura de códigos de barras desde imágenes y PDFs sin bloquear el hilo principal.

¿Cuáles son los pasos para habilitar el multihilo para el procesamiento de códigos de barras?

Para habilitar el procesamiento de códigos de barras en múltiples hilos, establece la propiedad Multithreaded en verdadero y configura la propiedad MaxParallelThreads para utilizar varios núcleos de CPU de manera eficiente. IronBarcode admite estas configuraciones.

¿Cuáles son las ventajas de usar operaciones asincrónicas en la lectura de códigos de barras?

Las operaciones asíncronas en la lectura de códigos de barras permiten que las tareas avancen sin bloquear el hilo principal, mejorando la capacidad de respuesta de la aplicación, particularmente en operaciones dependientes de I/O. Los métodos asíncronos de IronBarcode facilitan esto utilizando las palabras clave async y await.

¿Cómo mejora el rendimiento del multihilo en la lectura de códigos de barras?

El multihilo mejora el rendimiento de la lectura de códigos de barras permitiendo la ejecución concurrente de tareas en múltiples núcleos de CPU, acelerando así el procesamiento. Esto es particularmente beneficioso para tareas que dependen del CPU.

¿Cuál es el número predeterminado de hilos usados en la lectura multihilo de códigos de barras?

En IronBarcode, el número predeterminado de hilos utilizados para la lectura de códigos de barras multihilo es 4, que se puede ajustar a través de la propiedad MaxParallelThreads según las capacidades de su CPU.

¿Dónde puedo descargar la biblioteca para la lectura asincrónica y multihilo de códigos de barras en C#?

Puedes descargar la biblioteca para la lectura asincrónica y multihilo de códigos de barras en C# desde el gestor de paquetes de .NET NuGet en https://nuget.org/packages/IronPdf/. Esta biblioteca proporciona funcionalidades para operaciones tanto asincrónicas como multihilo.

¿Se puede usar el multihilo en todos los sistemas para la lectura de códigos de barras?

El multihilo puede ser utilizado en sistemas con múltiples núcleos de CPU, ya que estos núcleos permiten el procesamiento concurrente de hilos. La funcionalidad de multihilo de IronBarcode aprovecha dichos sistemas.

¿Cómo puedo comparar el rendimiento de las lecturas normales, asincrónicas y multihilo de códigos de barras?

La comparación de rendimiento muestra que las lecturas normales son las más lentas, las lecturas asincrónicas son más rápidas y las lecturas multihilo son las más rápidas debido a su utilización de múltiples núcleos de CPU. IronBarcode ofrece estas opciones de lectura para un rendimiento mejorado.

¿Cuál es el mejor método para leer múltiples códigos de barras en un documento?

IronBarcode proporciona un soporte completo para la lectura de múltiples códigos de barras en un documento. Para obtener una guía detallada, consulta la documentación en /csharp/barcode/how-to/read-multiple-barcodes/.

Hairil Hasyimi Bin Omar
Ingeniero de Software
Como todos los grandes ingenieros, Hairil es un ávido aprendiz. Está refinando su conocimiento de C#, Python y Java, usando ese conocimiento para agregar valor a los miembros del equipo en Iron Software. Hairil se unió al equipo de Iron Software desde la Universiti Teknologi MARA en Malasia, donde se ...
Leer más
¿Listo para empezar?
Nuget Descargas 1,979,979 | Version: 2025.11 recién lanzado