IRONSOFTWAREHOME

Jak korzystać z Async i Multithread w C# z IronBarcode

Hairil Hasyimi Bin Omar
Hairil Hasyimi Bin Omar
Updated: 3 czerwca 2026

Async i multithreading w IronBarcode optymalizują wydajność odczytu kodów kreskowych na różne sposoby - async zapobiega blokowaniu głównego wątku podczas operacji I/O, podczas gdy multithreading przetwarza wiele kodów kreskowych jednocześnie na rdzeniach CPU.

Programiści często mylą operacje Async i Multithreading. Obie metody zwiększają wydajność i efektywność programu poprzez optymalizację wykorzystania zasobów systemowych i skrócenie czasu działania. Różnią się jednak podejściem, mechanizmami i przypadkami użycia. IronBarcode obsługuje oba podejścia. Ten artykuł bada ich różnice i implementację przy użyciu IronBarcode.

Szybki start: Asynchroniczne i wielowątkowe przykład odczytu kodów kreskowych

Użyj tego przykładu jednowierszowego, aby szybko rozpocząć pracę z IronBarcode. Pokazuje, jak łatwo jest łączyć asynchroniczne czytanie i opcje multithreading, aby skanować wiele obrazów kodów kreskowych równolegle z minimalną konfiguracją.

  1. 1Install IronBarcode with NuGet Package Manager

    PM > Install-Package BarCode

  2. 2Skopiuj i uruchom ten fragment kodu.

    var results = await IronBarCode.BarcodeReader.ReadAsync(imagePaths, new IronBarCode.BarcodeReaderOptions { Multithreaded = true, MaxParallelThreads = 4, ExpectMultipleBarcodes = true });
    C#
  3. 3Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronBarcode w swoim projekcie już dziś z darmową wersją próbną
    arrow pointer

Jak czytać kody kreskowe asynchronicznie za pomocą IronBarcode?

Asynchroniczne czytanie umożliwia przeprowadzenie długich lub blokujących operacji bez blokowania wykonywania głównego wątku. W C# używaj słów kluczowych async i await z metodami obsługującymi funkcje asynchroniczne. To podejście nie tworzy dodatkowych wątków, lecz zwalnia bieżący wątek. Podczas gdy główny wątek rozpoczyna i zarządza zadaniami, nie pozostaje wyłącznie oddany jednemu zadaniu. Główny wątek zwraca się, kiedy metoda asynchroniczna wymaga jego zaangażowania, zwalniając go do obsługi innych zadań, gdy nie jest potrzebny - szczególnie przydatne dla zadań I/O, jak czytanie/zapisywanie plików czy wykonywanie żądań sieciowych.

Rozważ odczyt kodów kreskowych jako przykład. Proces obejmuje:

  • Czytanie pliku
  • Stosowanie opcji odczytu
  • Dekodowanie kodu kreskowego

Podczas czytania pliku można zwolnić główne zadanie. To korzystne w scenariuszach z wieloma plikami obrazów lub dużymi PDF-ami, jak pokazano w naszym samouczku czytania kodów kreskowych.

Użyj metod ReadAsync i ReadPdfAsync, aby czytać kody kreskowe asynchronicznie dla obrazów i dokumentów PDF, odpowiednio. Przed zainstalowaniem operacji async upewnij się, że zainstalowałeś IronBarcode przez NuGet w swoim projekcie.

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());
}

Fragment kodu powyżej instancjuje List ścieżek obrazów do asynchronicznego odczytu przez IronBarcode. Aby odczytać obrazy, użyj metody ReadAsync z klasy BarcodeReader. Określ imagePaths i opcje odczytu. Dla zaawansowanych opcji konfiguracji zapoznaj się z naszym przewodnikiem po ustawieniach czytnika kodów kreskowych.

Ta metoda operacji asynchronicznej jest również dostępna do odczytu kodów kreskowych w dokumentach PDF za pomocą ReadPdfAsync w tej samej klasie. W przypadku specyficznych konfiguracji czytania PDF zapoznaj się z naszym przewodnikiem ustawień czytnika kodów kreskowych w PDF.

Multithreaded
MaxParallelThreads

Kiedy powinienem używać czytania asynchronicznego zamiast zwykłych metod?

Asynchroniczny odczyt wyróżnia się w kilku scenariuszach:

  1. Aplikacje GUI: Aplikacje Windows Forms lub WPF wymagające responsywności interfejsu użytkownika. Async zapobiega zamarzaniu interfejsu podczas skanowania kodów kreskowych.

  2. Aplikacje web: Aplikacje ASP.NET obsługujące wiele jednoczesnych żądań bez blokowania wątków, zwłaszcza podczas przetwarzania przesyłanych obrazów kodów kreskowych.

  3. Przetwarzanie wsadowe: Selektywne odczytywanie wielu obrazów kodów kreskowych lub PDF-ów, pozwalając na wykonywanie innych zadań podczas operacji I/O.

  4. Operacje sieciowe: Odczyt kodów kreskowych z zewnętrznych źródeł lub URL-i, jak pokazano w naszym przykładzie asynchronicznego odczytu kodów kreskowych z URL.

Dlaczego czytanie asynchroniczne poprawia responsywność aplikacji?

Asynchroniczny odczyt poprawia responsywność poprzez zwalnianie głównego wątku podczas operacji wiązanych z I/O. Kiedy IronBarcode odczytuje plik obrazu z dysku lub przetwarza plik PDF, wątek nie pozostaje w stanie bezczynności. Zamiast tego zajmuje się innymi zadaniami, takimi jak reagowanie na działania użytkownika lub przetwarzanie żądań. Jest to szczególnie widoczne w przypadku:

  • Duże pliki graficzne wymagające znacznego czasu ładowania
  • Pliki PDF zawierające wiele stron z BarCodes
  • Sieciowe źródła obrazów
  • Sytuacje wymagające zastosowania filtrów korekcji obrazu przed wykryciem BarCode

Jakie są typowe pułapki związane z asynchronicznym odczytem BarCodes?

Podczas wdrażania asynchronicznego odczytu BarCODE należy zwrócić uwagę na następujące typowe problemy:

  1. Deadlocks: Unikaj Result lub Wait() w metodach async w kontekstach UI. Zawsze używaj await w całym łańcuchu wywołań.

  2. Obsługa wyjątków: Należy otaczać wywołania asynchroniczne blokami try-catch, ponieważ wyjątki w metodach asynchronicznych mogą nie propagować się zgodnie z oczekiwaniami.

  3. Przełączanie kontekstu: Rozważ użycie ConfigureAwait(false), gdy nie musisz wracać do pierwotnego kontekstu synchronizacji.

  4. Błędne przekonania dotyczące wydajności: Async nie przyspiesza poszczególnych operacji; poprawia responsywność aplikacji. Aby przyspieszyć działanie w przypadku wielu obrazów, warto rozważyć wielowątkowość.

W celu rozwiązywania problemów związanych z asynchronicznością zapoznaj się z naszym przewodnikiem dotyczącym rozwiązywania problemów z rozpoznawaniem kodów BarCode.

Jak włączyć wielowątkowe odczytywanie BarCode'ów?

W przeciwieństwie do operacji asynchronicznych, wielowątkowość polega na jednoczesnym wykonywaniu jednego procesu w wielu wątkach. Zamiast sekwencyjnego wykonywania w jednym wątku, wielowątkowość dzieli zadania między wiele wątków w celu ich równoczesnego wykonywania. Wielowątkowość wymaga wielu rdzeni procesora, ponieważ rdzenie te niezależnie wykonują wątki. Podobnie jak operacje asynchroniczne, wielowątkowość poprawia wydajność i responsywność aplikacji.

W IronBarcode włącz wielowątkowość, ustawiając właściwość Multithreaded i określając maksymalną liczbę rdzeni do równoczesnego wykonania za pomocą MaxParallelThreads w BarcodeReaderOptions. Domyślna wartość MaxParallelThreads to 4, regulowana w oparciu o dostępne rdzenie CPU. Aby uzyskać optymalne ustawienia wydajności, zapoznaj się z naszym przewodnikiem po opcjach prędkości czytania.

Zwróć uwagę: Aby znaleźć dostępne rdzenie: Menedżer zadań -> zakładka Wydajność -> kliknij CPU. (Pole "Cores" wyświetla liczbę.
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());
}

Jakiego wzrostu wydajności mogę się spodziewać?

Przeanalizujmy dwa przykładowe obrazy i porównajmy czasy odczytu w przypadku operacji normalnych, asynchronicznych i wielowątkowych.

Przykładowy obrazek

Przykład BARCODE UPC-A zawierający numer 0 123456 789012 do demonstracji wielowątkowego odczytu BARCODE-ów
Przykładowy BARCODE UPC-A z numerem 771234567003 do demonstracji wielowątkowego odczytu BARCODE'ów
Normalny tekstOdczyt asynchronicznyOdczyt wielowątkowy (4 rdzenie)
01,75 sekundy01,67 sekundy01,17 sekundy

Porównanie pokazuje znaczny wzrost wydajności dzięki asynchronicznemu i wielowątkowemu odczytowi. Wielowątkowość zapewnia około 33% poprawę w stosunku do normalnego odczytu, podczas gdy asynchroniczność zapewnia około 5% poprawy. Jednak operacje te służą różnym celom i opierają się na różnych podejściach. Wybierz podejście, które najlepiej odpowiada wymaganiom Twojej aplikacji.

Poprawa wydajności zależy od:

  • Liczba przetworzonych obrazów
  • Złożoność obrazu i jakość BARCODE
  • Dostępne rdzenie procesora
  • Inne zasoby systemowe

W przypadku sytuacji, w których na jednym dokumencie znajduje się wiele BARCODE-ów, zapoznaj się z przewodnikiem Odczytywanie wielu BARCODE-ów.

Kiedy należy wybrać wielowątkowość zamiast operacji asynchronicznych?

Wybierz wielowątkowość, gdy:

  1. Operacje CPU-Bound: Przetwarzanie obejmuje ciężkie obliczenia, takie jak złożone filtry obrazów lub obrazy o wysokiej rozdzielczości
  2. Przetwarzanie wsadowe: Wiele niezależnych obrazów wymaga równoczesnego przetwarzania
  3. Systemy wielordzeniowe: Środowisko wdrożeniowe ma dostępne wiele rdzeni CPU
  4. Krytyczne pod względem wydajności: Szybkość przetwarzania surowego przewyższa efektywność zasobów

Wybierz operacje asynchroniczne, gdy:

  1. Operacje I/O-Bound: Większość czasu obejmuje odczytywanie plików lub oczekiwanie na odpowiedzi sieciowe
  2. Aplikacje UI: Utrzymanie responsywnych interfejsów użytkownika jest kluczowe
  3. Ograniczone zasoby: Uruchamianie na systemach z ograniczoną liczbą rdzeni CPU
  4. Aplikacje internetowe: Efektywna obsługa wielu równoczesnych żądań

Jak określić optymalną wartość MaxParallelThreads?

Optymalna wartość MaxParallelThreads zależy od kilku czynników:

  1. Dostępne rdzenie CPU: Zacznij od Environment.ProcessorCount jako podstawy
  2. Typ obciążenia: Dla czystego odczytu kodów kreskowych użyj 75% dostępnych rdzeni
  3. Zasoby systemowe: Zostaw miejsce na system operacyjny i inne procesy
  4. Wyniki testów: Przeprowadź testy z twoim specyficznym obciążeniem

Oto praktyczne podejście do znalezienia optymalnej wartości:

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

W środowiskach produkcyjnych należy monitorować wydajność i dostosowywać ją w oparciu o rzeczywiste wzorce użytkowania. Rozważ wdrożenie konfiguracji klucza licencyjnego w przypadku wdrożeń Enterprise wymagających maksymalnej wydajności.

Aby zapoznać się z pełnym zakresem możliwości API, należy skorzystać z Dokumentacji API IronBarcode.

Często Zadawane Pytania

Jaka jest różnica między asynchronicznością a wielowątkowością podczas odczytu kodów kreskowych?

Z IronBarcode, operacje async zapobiegają blokowaniu głównego wątku podczas zadań I/O, takich jak odczyt plików, podczas gdy wielowątkowość pozwala na przetwarzanie wielu kodów jednocześnie na rdzeniach CPU. Async używa słów kluczowych async/await do zwolnienia głównego wątku podczas długich operacji, natomiast wielowątkowość tworzy wiele wątków do równoległego przetwarzania kodów.

Jak zaimplementować asynchroniczne odczytywanie kodów kreskowych w C#?

IronBarcode dostarcza metody ReadAsync() i ReadPdfAsync() do asynchronicznego odczytywania kodów kreskowych. Wystarczy użyć tych metod ze słowami kluczowymi async/await w C#, aby odczytywać kody z obrazów i PDF bez blokowania głównego wątku. Jest to szczególnie przydatne przy przetwarzaniu wielu plików obrazów lub dużych dokumentów PDF.

Jak mogę włączyć wielowątkowość do przetwarzania kodów kreskowych?

Aby włączyć wielowątkowość w IronBarcode, ustaw właściwość Multithreaded na 'true' w BarcodeReaderOptions. Możesz również kontrolować liczbę wątków równoległych, używając właściwości MaxParallelThreads, co pozwala na optymalizację wydajności w oparciu o możliwości systemu.

Czy mogę połączyć async i wielowątkowość dla optymalnej wydajności?

Tak, IronBarcode pozwala na połączenie obu podejść. Możesz używać ReadAsync() z włączoną wielowątkowością, ustawiając Multithreaded = true i konfigurując MaxParallelThreads w BarcodeReaderOptions. Ta kombinacja zapewnia zarówno nieblokujące operacje I/O, jak i równoległe przetwarzanie na wielu rdzeniach CPU.

Kiedy powinienem używać async w porównaniu do wielowątkowości dla odczytywania kodów kreskowych?

Używaj operacji async w IronBarcode, gdy masz do czynienia z zadaniami związanymi z I/O, takimi jak odczyt dużych plików lub wykonywanie zapytań sieciowych, ponieważ zapobiega to zawieszaniu się interfejsu użytkownika. Używaj wielowątkowości, gdy musisz jednocześnie przetwarzać wiele kodów i masz dostępne zasoby CPU. Dla najlepszych wyników, łącz oba podejścia przy przetwarzaniu wielu dużych obrazów kodów kreskowych lub PDF.

What factors affect the optimal 'MaxParallelThreads' setting in IronBarcode?

The optimal 'MaxParallelThreads' value is influenced by available CPU cores, workload type, overall system resources, and testing results. A practical starting point is to use one less than the total available CPU cores.

How does IronBarcode's async functionality improve application responsiveness?

Async functionality in IronBarcode increases application responsiveness by freeing the main thread during long I/O-bound barcode reading tasks, allowing the application to handle other processes concurrently, such as user interface updates.

What are the advantages of using multithreading in barcode reading?

Multithreading allows simultaneous processing of multiple images, which enhances performance in CPU-bound operations such as processing complex image filters or high-resolution images. This is beneficial in environments with multiple CPU cores.

How can I implement license key configuration for optimal performance in IronBarcode?

For enterprise deployments requiring maximum performance, consider implementing license key configuration. This can be done by following IronBarcode's documentation on license key settings to fully unlock features and optimize resource utilization.

What are the key differences between async and multithreading in IronBarcode?

Async in IronBarcode prevents blocking the main thread during I/O operations, ideal for file and network tasks, whereas multithreading divides tasks among threads for concurrent execution across CPU cores, improving performance in CPU-bound operations.

Gotowy, aby rozpocząć?

Nuget Downloads 2,422,100Wersja:2026.9właśnie wydany

Odbierz swój BEZPŁATNY

30-dniowy klucz próbny natychmiast.

bullet_checkedNie wymaga karty kredytowej ani tworzenia konta
test_punktorówTestuj w produkcji
bez znaków wodnych
kalendarz_punktorów30 dni w pełni
funkcjonalny produkt
wsparcie_punktorów24/5 wsparcie techniczne
w trakcie okresu próbnego
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta
Biblioteka C# NuGet dla plików PDF
Zainstaluj za pomocą NuGet

Wersja: 2026.9

PM > Install-Package BarCode
nuget.org/packages/BarCode/
  1. W Eksploratorze Rozwiązań, kliknij prawym przyciskiem Myszy na Odwołania, Zarządzaj pakietami NuGet
  2. Wybierz Przeglądaj i wyszukaj "IronBarCode"
  3. Wybierz pakiet i zainstaluj
DLL PDF dla C#
Pobierz DLL

Wersja: 2026.9

  1. Pobierz i rozpakuj IronBarCode do lokalizacji, takiej jak ~/Libs w katalogu Twojego rozwiązania
  2. W Eksploratorze Rozwiązań Visual Studio kliknij prawym przyciskiem Referencje. Wybierz Przeglądaj, "IronBarCode.dll"

Licencje od $999

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta