Como usar Async e Multithread em um código de barras usando C#

Como Usar Async e Multithread em C# com IronBarcode

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

Async e multithread em IronBarcode otimizam o desempenho de leitura de códigos de barras de maneira diferente - async evita o bloqueio do thread principal durante operações de E/S, enquanto multithread processa múltiplos códigos de barras simultaneamente entre os núcleos da CPU.

Os desenvolvedores frequentemente confundem as operações Async e Multithreading. Ambos os métodos melhoram o desempenho e a eficiência do programa otimizando a utilização dos recursos do sistema e reduzindo o tempo de execução. No entanto, eles diferem na abordagem, mecanismos e casos de uso. IronBarcode suporta ambas as abordagens. Este artigo explora suas diferenças e implementação usando IronBarcode.

Início Rápido: Exemplo de Leitura de Código de Barras Async & Multithreaded

Use este exemplo de uma linha para começar imediatamente com IronBarcode. Isso mostra como é fácil combinar opções de leitura assíncrona e multithreading para escanear várias imagens de código de barras em paralelo com configuração mínima.

  1. Instale IronBarcode com o Gerenciador de Pacotes NuGet

    PM > Install-Package BarCode
  2. Copie e execute este trecho de código.

    var results = await IronBarCode.BarcodeReader.ReadAsync(imagePaths, new IronBarCode.BarcodeReaderOptions { Multithreaded = true, MaxParallelThreads = 4, ExpectMultipleBarcodes = true });
  3. Implante para testar em seu ambiente de produção.

    Comece a usar IronBarcode em seu projeto hoje com uma avaliação gratuita

    arrow pointer


Como Leio Códigos de Barras Assincronamente com IronBarcode?

A leitura assíncrona permite que operações longas ou bloqueantes prossigam sem bloquear a execução do thread principal. Em C#, use as palavras-chave async e await com métodos que suportam recursos assíncronos. Essa abordagem não cria threads adicionais, mas libera o thread atual. Enquanto o thread principal inicia e gerencia as tarefas, ele não permanece exclusivamente dedicado a uma única tarefa. O thread principal retorna quando o método assíncrono requer sua participação, liberando-o para lidar com outras tarefas quando não necessário—particularmente útil para tarefas limitadas por I/O como leitura/escrita de arquivos ou solicitações de rede.

Considere a leitura de códigos de barras como um exemplo. O processo envolve:

  • Leitura do arquivo
  • Aplicação das opções de leitura
  • Decodificação do código de barras

Durante a leitura do arquivo, a tarefa principal pode ser liberada. Isso beneficia cenários com múltiplos arquivos de imagem ou PDFs grandes, como demonstrado em nosso tutorial de leitura de códigos de barras.

Use os métodos ReadAsync e ReadPdfAsync para ler códigos de barras de forma assíncrona para imagens e documentos PDF, respectivamente. Antes de implementar operações assíncronas, certifique-se de ter instalado o IronBarcode via NuGet em seu projeto.

: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());
}
$vbLabelText   $csharpLabel

O trecho de código acima instancia uma lista de caminhos de imagem para serem lidos assincronamente pelo IronBarcode. Para ler as imagens, utilize o método ReadAsync da classe BarcodeReader. Especifique as opções imagePaths e leitura. Para opções de configuração avançadas, consulte nosso guia sobre configurações de leitor de código de barras.

Este método de operação assíncrona também está disponível para leitura de códigos de barras em documentos PDF através de ReadPdfAsync na mesma classe. Para configurações específicas de leitura de PDF, veja nosso guia de configurações de leitor de código de barras em PDF.

Quando Devo Usar Leitura Assíncrona em vez de Métodos Regulares?

A leitura assíncrona é excelente em diversos cenários:

  1. Aplicações GUI: Aplicações Windows Forms ou WPF que requerem responsividade da interface do usuário. O async previne o congelamento da interface durante a varredura de códigos de barras.

  2. Aplicações Web: Aplicações ASP.NET que lidam com múltiplas solicitações simultâneas sem bloquear threads, especialmente ao processar imagens de código de barras carregadas.

  3. Processamento em Lote: Leitura sequencial de múltiplas imagens de código de barras ou PDFs, permitindo que outras tarefas sejam executadas durante operações de I/O.

  4. Operações de Rede: Leitura de códigos de barras de fontes remotas ou URLs, como mostrado em nosso exemplo de leitura de códigos de barras de URL assincronamente.

Por que a Leitura Assíncrona Melhora a Responsividade da Aplicação?

A leitura assíncrona melhora a responsividade ao liberar o thread principal durante operações limitadas por I/O. Quando o IronBarcode lê um arquivo de imagem do disco ou processa um PDF, o thread não fica esperando ocioso. Em vez disso, ele lida com outras tarefas como responder a entradas de usuário ou processar solicitações. Isso é especialmente perceptível ao lidar com:

  • Arquivos de imagem grandes que requerem tempo de carregamento significativo
  • PDFs com múltiplas páginas contendo códigos de barras
  • Fontes de imagem baseadas em rede
  • Cenários que requerem filtros de correção de imagem antes da detecção de códigos de barras

Quais São os Erros Comuns ao Usar a Leitura Assíncrona de Códigos de Barras?

Ao implementar a leitura assíncrona de códigos de barras, observe os seguintes problemas comuns:

  1. Deadlocks: Evite Result ou Wait() em métodos assíncronos em contextos de UI. Sempre use await ao longo da cadeia de chamadas.

  2. Manipulação de Exceções: Envolva chamadas assíncronas em blocos try-catch, pois exceções em métodos assíncronos podem não propagar como esperado.

  3. Alternância de Contexto: Considere o uso de ConfigureAwait(false) quando você não precisa retornar ao contexto de sincronização original.

  4. Concepções Errôneas sobre Performance: O async não acelera operações individuais; ele melhora a responsividade da aplicação. Para melhorias de velocidade com várias imagens, considere o multithreading.

Para resolver problemas relacionados com async, consulte o nosso guia de resolução de problemas de reconhecimento de código de barras.

Como habilito a leitura de código de barras em multithreading?

Ao contrário das operações assíncronas, o multithreading executa um único processo em vários threads simultaneamente. Em vez de uma execução sequencial em um único thread, o multithreading divide tarefas entre vários threads para execução simultânea. O multithreading requer múltiplos núcleos de CPU, pois estes núcleos executam threads independentemente. Tal como nas operações assíncronas, o multithreading melhora o desempenho e a capacidade de resposta da aplicação.

No IronBarcode, habilite multithreading definindo a propriedade Multithreaded e especificando o máximo de núcleos para execução concorrente usando MaxParallelThreads em BarcodeReaderOptions. O valor padrão MaxParallelThreads é 4, ajustável com base nos núcleos de CPU disponíveis. Para configurações de desempenho otimizadas, consulte nosso guia de opções de velocidade de leitura.

ObservePara encontrar núcleos disponíveis: Gerenciador de Tarefas -> Guia de Desempenho -> Clique em CPU. 'Campo de Núcleos' exibe a contagem.

: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());
}
$vbLabelText   $csharpLabel

Qual melhoria de desempenho posso esperar?

Vamos ler duas imagens de amostra e comparar os tempos de leitura entre operações normais, assíncronas e multithread.

Imagem de exemplo

Exemplo de código de barras UPC-A mostrando o número 0 123456 789012 para demonstração de leitura de código de barras em multithread
Amostra de código de barras UPC-A mostrando o número 771234567003 para demonstração de leitura de código de barras em multithread
Leitura Normal Leitura Assíncrona Leitura em Multithread (4 núcleos)
01.75 segundos 01.67 segundos 01.17 segundos

A comparação mostra aumentos significativos de desempenho com a leitura assíncrona e multithread. O multithreading fornece aproximadamente 33% de melhoria sobre a leitura normal, enquanto async oferece cerca de 5% de melhoria. No entanto, essas operações servem a propósitos e abordagens diferentes. Escolha a abordagem que melhor atende aos requisitos da sua aplicação.

As melhorias de desempenho variam com base em:

  • Número de imagens processadas
  • Complexidade das imagens e qualidade do código de barras
  • Núcleos de CPU disponíveis
  • Outros recursos do sistema

Para situações com múltiplos códigos de barras em um único documento, visite o guia para leitura de múltiplos códigos de barras.

Quando devo escolher multithreading em vez de operações async?

Escolha multithreading quando:

  1. Operações Baseadas em CPU: O processamento envolve computação pesada como filtros complexos de imagem ou imagens de alta resolução
  2. Processamento em Lote: Imagens independentes múltiplas requerem processamento simultâneo
  3. Sistemas com Múltiplos Núcleos: O ambiente de implantação possui múltiplos núcleos de CPU disponíveis
  4. Crítico para Desempenho: A velocidade bruta de processamento supera a eficiência de recursos

Escolha operações async quando:

  1. Operações Baseadas em I/O: A maior parte do tempo é gasto lendo arquivos ou aguardando respostas de rede
  2. Aplicações de UI: Manter interfaces de usuário responsivas é crucial
  3. Recursos Limitados: Operando em sistemas com núcleos de CPU limitados
  4. Aplicações Web: Lidando com múltiplas requisições concorrentes de forma eficiente

Como determino o valor ideal para MaxParallelThreads?

O valor ótimo MaxParallelThreads depende de vários fatores:

  1. Núcleos de CPU Disponíveis: Comece com Environment.ProcessorCount como base
  2. Tipo de Carga de Trabalho: Para leitura pura de código de barras, use 75% dos núcleos disponíveis
  3. Recursos do Sistema: Deixe uma margem para o SO e outros processos
  4. Resultados dos Testes: Avalie com sua carga de trabalho específica

Aqui está uma abordagem prática para encontrar o valor ideal:

int optimalThreads = Math.Max(1, Environment.ProcessorCount - 1);
int optimalThreads = Math.Max(1, Environment.ProcessorCount - 1);
$vbLabelText   $csharpLabel

Para ambientes de produção, monitore o desempenho e ajuste com base nos padrões de uso atuais. Considere implementar configuração de chave de licença para implantações empresariais que exigem desempenho máximo.

Para capacidades completas de API, consulte a Referência da API do IronBarcode.

Perguntas frequentes

Qual a diferença entre assíncrono e multithread na leitura de códigos de barras?

Com o IronBarcode, as operações assíncronas evitam o bloqueio da thread principal durante tarefas de E/S, como a leitura de arquivos, enquanto o processamento multithread processa vários códigos de barras simultaneamente em diferentes núcleos da CPU. O processamento assíncrono utiliza as palavras-chave `async` e `await` para liberar a thread principal durante operações demoradas, enquanto o processamento multithread cria múltiplas threads para lidar com o processamento de códigos de barras em paralelo.

Como faço para implementar a leitura assíncrona de código de barras em C#?

IronBarcode fornece os métodos ReadAsync() e ReadPdfAsync() para leitura assíncrona de códigos de barras. Basta usar esses métodos com as palavras-chave async/await em C# para ler códigos de barras de imagens e PDFs sem bloquear a thread principal. Isso é particularmente útil ao processar vários arquivos de imagem ou documentos PDF grandes.

Como posso habilitar o processamento multithread para códigos de barras?

Para habilitar o multithreading no IronBarcode, defina a propriedade Multithreaded como 'true' em BarcodeReaderOptions. Você também pode controlar o número de threads paralelas usando a propriedade MaxParallelThreads, permitindo otimizar o desempenho de acordo com os recursos do seu sistema.

Posso combinar processamento assíncrono e multithreading para obter o desempenho ideal?

Sim, o IronBarcode permite combinar ambas as abordagens. Você pode usar ReadAsync() com multithreading habilitado, definindo Multithreaded = true e configurando MaxParallelThreads em BarcodeReaderOptions. Essa combinação oferece operações de E/S não bloqueantes e processamento paralelo em vários núcleos da CPU.

Quando devo usar o método assíncrono em vez do multithreading para leitura de código de barras?

Utilize operações assíncronas no IronBarcode ao lidar com tarefas que exigem muita entrada e saída de dados, como a leitura de arquivos grandes ou o envio de requisições de rede, pois isso evita o congelamento da interface do usuário. Utilize multithreading quando precisar processar vários códigos de barras simultaneamente e tiver recursos de CPU disponíveis. Para obter os melhores resultados, combine ambas as abordagens ao processar várias imagens de códigos de barras grandes ou PDFs.

Hairil Hashimi Bin Omar
Engenheiro de Software
Como todo grande engenheiro, Hairil é um ávido aprendiz. Ele está aprimorando seus conhecimentos em C#, Python e Java, usando esse conhecimento para agregar valor aos membros da equipe da Iron Software. Hairil ingressou na equipe da Iron Software vindo da Universiti Teknologi MARA, na Malásia, onde se formou em ...
Leia mais
Pronto para começar?
Nuget Downloads 2,108,094 | Versão: 2026.3 acaba de ser lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package BarCode
executar um exemplo Veja seu fio se transformar em um código de barras.