Cómo utilizar Async y Multithread
Los términos Async y Multithreading a menudo se confunden. Ambos métodos pretenden mejorar el rendimiento y la eficiencia de los programas optimizando la utilización de los 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 utilizando IronBarcode.
Cómo utilizar Async y Multithread
- >Download the C# library for async and multithread support
- Utilice los métodos
ReadAsync
yReadPdfAsync
para la lectura asíncrona de códigos de barras desde imágenes y PDFs - Habilitar el multithreading con la propiedad Multithreaded establecida en 'true'
- Specify parallel thread count using the MaxParallelThreads property
- Consulta la comparación de rendimiento entre la lectura de códigos de barras normal, asincrónica y multihilo
Empezar a utilizar IronBarcode
Comience a usar IronBarcode en su proyecto hoy con una prueba gratuita.
Ejemplo de lectura asíncrona de códigos de barras
Empecemos por entender qué es la lectura asíncrona y en qué beneficia a los usuarios. La lectura asíncrona permite realizar operaciones largas o bloqueantes 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 asíncronas. Esto no creará hilos adicionales, sino que liberará el hilo actual. Aunque el hilo principal sigue siendo necesario para iniciar y gestionar tareas, no es necesario que se dedique exclusivamente a una sola tarea. El hilo principal es invocado cuando el método asíncrono requiere su participación, liberándolo para manejar otras tareas cuando no es necesario, tales como tareas de E/S como la lectura/escritura de archivos o hacer peticiones de red.
Tomemos como ejemplo la lectura de códigos de barras. En este caso, los pasos serían:
- Lectura del fichero
- Aplicar las opciones de lectura
Descodificación del código de barras
Durante el paso "Lectura del fichero", se puede liberar la tarea principal.
Utilice los métodos
ReadAsync
yReadPdfAsync
para leer códigos de barras de forma asincrónica en 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());
}
A partir del fragmento de código anterior, hemos instanciado una Lista de rutas de imágenes que IronBarcode leerá de forma asíncrona. Para leer las imágenes, puedes usar el método ReadAsync
de la clase BarcodeReader. A continuación, los usuarios pueden especificar las rutas de las imágenes, 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 multihilo
A diferencia de las operaciones asíncronas, el multithreading permite ejecutar un único proceso en varios hilos simultáneamente. Esto significa que en lugar de ejecutar un proceso secuencialmente en un único hilo, el multithreading divide las tareas entre varios hilos, lo que permite la ejecución concurrente. Sin embargo, para que el multihilo funcione, una máquina debe tener varios núcleos de CPU, ya que estos núcleos se utilizan para ejecutar los hilos de forma independiente. Al igual que las operaciones asíncronas, el multithreading pretende mejorar el rendimiento y la capacidad de respuesta de las aplicaciones.
En IronBarcode, habilita la ejecución en múltiples subprocesos configurando la propiedad Multithreaded y especificando el máximo de núcleos para la ejecución concurrente utilizando MaxParallelThreads en BarcodeReaderOptions. El valor predeterminado para MaxParallelThreads es 4, lo cual se puede ajustar según los núcleos de CPU disponibles.
[{i:(Para encontrar los núcleos disponibles: Administrador de tareas -> Pestaña de rendimiento -> Hacer clic en CPU. El campo 'Cores' muestra el conteo.
: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());
}
Comparación de resultados
Ahora, leamos las dos imágenes de abajo y comparemos el tiempo de lectura de las operaciones normales, asíncronas y multihilo.
Imagen de muestra

Normal Read | Asynchronous Read | Multithreaded Read (4 cores) |
---|---|---|
01.75 second | 01.67 second | 01.17 second |
De la tabla comparativa se desprende que hay un aumento significativo del rendimiento una vez que se implementa la lectura asíncrona y multihilo. Sin embargo, estas dos operaciones responden a objetivos y planteamientos diferentes. Por lo tanto, los usuarios deben determinar qué enfoque se adapta mejor a la aplicación que están creando.
Por último, puede haber situaciones en las que haya varios códigos de barras en un mismo documento. Para más información, visite la guía Leer Múltiples Códigos de Barras.