IRONSOFTWAREHOME

C#'de QR Kod İşlemleri için Async ve Çoklu İş Parçacığı Nasıl Kullanılır

Curtis Chau
Curtis Chau
Updated: 6 Mart 2026

Tek iş parçacıklı QR taraması, her görüntü çözümlemesi süresince çağıran iş parçacığını engeller.

Bir WPF buton işleyicisinde bu, çözümleme tamamlanana kadar UI'yı dondurur. Yüzlerce görüntü işleyen bir toplu işte, bu, CPU çekirdeklerini paralel çalışabilecekken boşta bırakır. IronQR'nin ReadAsync yöntemi, bireysel okumaları beklenebilir bir göreve delege eder ve standart Read yöntemi, toplu işlem kapasitesi için Parallel.ForEach ve Task.WhenAll ile çalışır.

Bu kılavuz, QR kodlarını eş zamanlı olarak nasıl işleyebileceğinizi, toplu okumaları CPU çekirdeklerine nasıl dağıtabileceğinizi ve yüksek hacimli boru hatları için her iki deseni nasıl birleştirebileceğinizi gösterir.

Hızlı Başlangıç: QR Kodları Eş Zamanlı İşleme

Çağıran iş parçacığını engellemeden, bir resmi yükleyin ve çözüm sonuçlarını bekleyin.

  1. 1Install IronQR with NuGet Package Manager

    PM > Install-Package IronQR

  2. 2Bu kod parçacığını kopyalayın ve çalıştırın.

    using IronQr;
    using IronSoftware.Drawing;
    
    var input = new QrImageInput(AnyBitmap.FromFile("ticket.png"));
    IEnumerable<QrResult> results = await new QrReader().ReadAsync(input);
    Console.WriteLine(results.First().Value);
    C#
  3. 3Canlı ortamınızda test için dağıtım yapın

    Ücretsiz deneme ile bugün projenizde IronQR kullanmaya başlayın
    arrow pointer

QR Kodlarını Eş Zamanlı Olarak Okuma

ReadAsync beklenebilir bir görev döndürür, bu da WPF/MAUI olay işleyicileri, ASP.NET denetleyici eylemleri veya herhangi bir zaman uyumsuz yöntem ile uyumlu yapar. Giriş, bir görüntü bitmap'inden oluşturulmalıdır; dosya yolu aşırı yükü yoktur.

Yazma tarafı eş zamanlıdır ve async çeşitleri yoktur. Dosya I/O sırasında ipliği engellememek için, kaydetme adımını File.WriteAllBytesAsync() ile, bit eşlemden alınan ham baytları kullanarak sarın.

Giriş

Bir QR kod etkinlik rozeti, async okuma ve yazma desenini göstermek için tarandı ve yeniden oluşturuldu.

QR kod kodlaması https://ironsoftware.com/event-badge, async okuma girişi olarak kullanıldı
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;

// --- Async read: non-blocking QR decode ---
var inputBmp = AnyBitmap.FromFile("event-badge.png");
var imageInput = new QrImageInput(inputBmp, QrScanMode.Auto);

var reader = new QrReader();
IEnumerable<QrResult> results = await reader.ReadAsync(imageInput);

foreach (QrResult result in results)
{
    Console.WriteLine($"[{result.QrType}] {result.Value}");
}

// --- Async-wrapped save: QrWriter.Write() and QrCode.Save() are synchronous ---
QrCode qrCode = QrWriter.Write("https://ironsoftware.com");
AnyBitmap qrImage = qrCode.Save();

// Save the bitmap bytes asynchronously (not an IronQR API — standard .NET async I/O)
byte[] pngBytes = qrImage.ExportBytes();
await File.WriteAllBytesAsync("output-qr.png", pngBytes);
C#

Çıktı

Terminal, çözülmüş QR türünü ve değerini [QrType] Value formatında görüntüler, ardından output-qr.png kaydedildiğini onaylar.

Terminal çıktısı, [QRCode] çözülmüş değerini ve output-qr.png kaydetme onayını gösteriyor

QrScanMode.Auto hem ML tespitini hem de temel bir tarama geçişini çalıştırır, her sonuçta çözülmüş değeri ve QR türünü doldurur. OnlyDetectionModel daha hızlıdır ancak yalnızca çevresel kutu koordinatlarını döndürür, değer alanını boş bırakır. Kodlanmış içerik gerektiğinde Auto kullanın.


QR Kodlarını Çoklu İş Parçacığı ile İşleme

Bağımsız olarak çözülebilen görüntüler için, Parallel.ForEach kullanılabilir CPU çekirdekleri arasında işi dağıtır. Her yineleme için ayrı bir QrReader örneği güvenli varsayılandır, çünkü IronQR, paylaşımlı okuyucu örnekleri için açık bir iplik güvenliği garantisi vermemektedir.

Giriş

Paralel toplu taramada kullanılan on QR kod test görüntüsünden dördü. Her görüntü bir URL kodlar ve çalışma zamanında qr-images/ klasöründen okunur.

https://ironsoftware.com/batch-1 adresini kodlayan, 10 görüntüden 1'i olan toplu QR kod giriş görüntüsü

Görüntü 1 (Toplu 1 of 10)

https://ironsoftware.com/batch-2 adresini kodlayan, 10 görüntüden 2'si olan toplu QR kod giriş görüntüsü

Görüntü 2 (Toplu 2 of 10)

https://ironsoftware.com/batch-3 adresini kodlayan, 10 görüntüden 3'ü olan toplu QR kod giriş görüntüsü

Görüntü 3 (Toplu 3 of 10)

https://ironsoftware.com/batch-4 adresini kodlayan, 10 görüntüden 4'ü olan toplu QR kod giriş görüntüsü

Görüntü 4 (Toplu 4 of 10)

using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using System.Collections.Concurrent;
using System.Diagnostics;

string[] files = Directory.GetFiles("qr-images/", "*.png");
var allResults = new ConcurrentBag<(string File, string Value)>();
int failCount = 0;
var sw = Stopwatch.StartNew();

Parallel.ForEach(files, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, file =>
{
    try
    {
        var input = new QrImageInput(
            AnyBitmap.FromFile(file),
            QrScanMode.Auto);

        // Per-thread QrReader instance — safe default
        var results = new QrReader().Read(input);

        foreach (QrResult result in results)
        {
            allResults.Add((Path.GetFileName(file), result.Value));
        }
    }
    catch (Exception ex)
    {
        Interlocked.Increment(ref failCount);
        Console.Error.WriteLine($"[ERROR] {Path.GetFileName(file)}: {ex.Message}");
    }
});

sw.Stop();

Console.WriteLine($"Processed {files.Length} files in {sw.Elapsed.TotalSeconds:F1}s");
Console.WriteLine($"QR codes found: {allResults.Count} | Failures: {failCount}");
Console.WriteLine($"Throughput: {files.Length / sw.Elapsed.TotalSeconds:F1} files/sec");
C#

Çıktı

Konsol, işlenen dosya sayısı, işlem süresi, bulunan QR kodları, her türlü hatalar ve verim dahil olmak üzere bir toplu özet görüntüler. Ardından her dosya adı ve çözülmüş URL'si listelenir.

Terminal çıktısı, paralel toplu sonuçları gösteriyor: 10 dosya işlendi, QR kodları bulundu, hatalar, verim ve dosya adı başına çözülen URL

10 test toplu QR kod giriş görüntüsünün tamamını indirin (batch-qr-images.zip).

ConcurrentBag<t> tüm ipliklerden sonuçları toplar ve kilitler gerektirmez. İş parçacığı-güvenli bir sayaç hataları izler ve her dosya için try-catch kullanmak, kötü bir görüntünün tüm partiyi kesintiye uğratmamasını sağlar. Bu yaklaşım, hata işleme nasıl yapılacağını açıklayan hata-izolasyon desenini takip eder.

MaxDegreeOfParallelism ayarlayın Environment.ProcessorCount CPU çekirdek sayısı ile uyumlu olacak şekilde. Ek iş parçacıkları kullanmak, üstyapıyı artırır ve performansı artırmaz, özellikle de CPU yoğunluklu ML modelleri için.


Async ve Paralel İşleme Kombine

Yüksek hacimli hatlar için, eşzamanlılığı sınırlandırmak amacıyla SemaphoreSlim ile Task.WhenAll eşleştirin. Parallel.ForEach'dan farklı olarak, bu desen, bir kerede kaç dekod çalıştığını kontrol ederken I/O'yu engellemez, büyük iş yükleri altında iplik havuzunun doygunluğunu önler.

Giriş

Yirmi QR kodu test görüntüsünün dördü eşzamanlı hat tarafından işlendi. Her görüntü bir URL kodlar ve SemaphoreSlim ile sınırlı eşzamanlılık kullanılarak paralel olarak çözülür.

Pipeline QR kodu giriş görüntüsü 1 / 20

Görüntü 1 (Boru Hattı 1 of 20)

Pipeline QR kodu giriş görüntüsü 2 / 20

Görüntü 2 (Boru Hattı 2 of 20)

Pipeline QR kodu giriş görüntüsü 3 / 20

Görüntü 3 (Boru Hattı 3 of 20)

Pipeline QR kodu giriş görüntüsü 4 / 20

Görüntü 4 (Boru Hattı 4 of 20)

using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using System.Collections.Concurrent;
using System.Diagnostics;

string[] files = Directory.GetFiles("high-volume/", "*.png");
var results = new ConcurrentBag<(string File, string Value)>();
int maxConcurrency = Environment.ProcessorCount;
using var semaphore = new SemaphoreSlim(maxConcurrency);
var sw = Stopwatch.StartNew();

var tasks = files.Select(async file =>
{
    await semaphore.WaitAsync();
    try
    {
        var bmp = AnyBitmap.FromFile(file);
        // Auto: runs ML detection plus a basic scan so result.Value is populated
        var input = new QrImageInput(bmp, QrScanMode.Auto);
        var qrResults = await new QrReader().ReadAsync(input);

        foreach (var qr in qrResults)
        {
            results.Add((Path.GetFileName(file), qr.Value));
        }
    }
    catch (Exception ex)
    {
        Console.Error.WriteLine($"{{\"file\":\"{Path.GetFileName(file)}\",\"error\":\"{ex.Message}\"}}");
    }
    finally
    {
        semaphore.Release();
    }
});

await Task.WhenAll(tasks);
sw.Stop();

Console.WriteLine($"Pipeline complete: {results.Count} QR codes from {files.Length} files in {sw.Elapsed.TotalSeconds:F1}s");
C#

Çıktı

Boru hattı bittiğinde, konsol bir özet görüntüler: toplam çözülen QR kodları sayısı, kaynak dosya sayısı ve geçen zaman, ardından her dosya adı ve çözülmüş URL'si.

Terminal çıktısı, boru hattı sonuçlarını gösteriyor: 20 dosyadan 20 QR kodu çözüldü ve dosya adı başına çözülen URL

20 test boru hattı QR kod giriş görüntüsünün tamamını indirin (high-volume-qr-images.zip).

Bant genişliği için semafor sınırını mevcut çekirdek sayısına uyacak şekilde ayarlayın veya büyük görüntülerle bellek baskısı olduğunda daha düşük ayarlayın.


Daha Fazla Okuma

Üretime hazır olduğunda lisans seçeneklerini görüntüleyin.

Sıkça Sorulan Sorular

C#'de asenkron QR kodu işlemenin amacı nedir?

C#'de asenkron QR kodu işleme, QR kodu işlemlerini ana iş parçacığını engellemeden gerçekleştirmenizi sağlar, IronQR'nin ReadAsync metodu gibi özellikleri kullanarak performansı ve yanıt vermeyi artırır.

Çoklu iş parçacığı QR kodu işlemeyi nasıl geliştirebilir?

Çoklu iş parçacığı, IronQR'yi kullanarak, aynı anda birden fazla işlemi çalıştırarak QR kodu işlemini önemli ölçüde iyileştirir, daha hızlı işlem süreleri ve geliştirilmiş uygulama verimliliği sağlar.

IronQR'daki ReadAsync metodu nedir?

IronQR'daki ReadAsync metodu, QR kodlarının asenkron okumasını etkinleştirir, C# uygulamanızın diğer görevleri geciktirmeden QR kodu verilerini işlemesine izin verir.

Parallel.ForEach, QR kodu işleme de nasıl yardımcı olur?

Parallel.ForEach, birden fazla QR kodunu aynı anda işlemek için görevleri birden çok iş parçacığına dağıtarak, IronQR ile verimli bir şekilde kullanılarak QR kodu işlemlerini hızlandırabilir.

SemaphoreSlim, QR kodu işlemlerinde hangi rolü oynar?

SemaphoreSlim, eşzamanlı görevlerin sayısını sınırlamak için kullanılır, IronQR ile QR kodlarının paralel işlenmesi sırasında kaynakları etkili bir şekilde yönetmeye yardımcı olur.

IronQR, sınırlandırılmış bir boru hattında QR kodlarını işlemek için kullanılabilir mi?

Evet, IronQR, eşzamanlılığı ve kaynak tahsisini etkili bir şekilde kontrol etmek için SemaphoreSlim gibi yapılar kullanarak sınırlandırılmış bir boru hattında QR kodlarını işlemek için kullanılabilir.

Asenkron QR kodu işlemleri için IronQR kullanmanın faydaları nelerdir?

Asenkron QR kodu işlemleri için IronQR kullanmak, uygulama yanıtını artırır, ana iş parçacığında engellemeyi azaltır ve büyük miktarda QR kodu verisini etkili bir şekilde yönetmenize olanak tanır.

IronQR kullanarak QR kodu işlemlerini paralel olarak çalıştırmak mümkün müdür?

Evet, IronQR, C#'deki çoklu iş parçacığı yeteneklerinden yararlanarak QR kodu işlemlerinin paralel işlenmesini destekler, daha hızlı ve daha verimli QR kodu yönetimi sağlar.

IronQR, C# uygulamalarında QR kodu işlemesini nasıl geliştirir?

IronQR, güçlü asenkron ve çoklu iş parçacığı yetenekleri sağlayarak QR kodu işleme sürelerini azaltır ve C# uygulamalarının ölçeklenebilirliğini artırır.

IronQR ile QR kodu işlemesi için C# özellikleri nelerdir?

Asenkron/await, Parallel.ForEach ve SemaphoreSlim gibi C# özellikleri IronQR'u tamamlar, etkili ve yüksek performanslı QR kodu işlemesi için bir çerçeve sağlar.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

Başlamaya Hazır mısınız?

Nuget Downloads 74,386Sürüm:2026.9yeni yayınlandı

Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez
PDF için C# NuGet Kütüphanesi
NuGet ile yükleyin

Sürüm: 2026.9

PM > Install-Package IronQR
nuget.org/packages/IronQR/
  1. Çözüm Gezgini'nde Referanslar'a sağ tıklayın, NuGet Paketlerini Yönet
  2. Gözat'ı seçin ve "IronQR" arayın
  3. Paketi seçin ve yükleyin
C# PDF DLL
DLL İndir

Sürüm: 2026.9

  1. IronQR'yi ~/Libs gibi Çözüm dizininde bir konuma indirin ve çıkartın
  2. Visual Studio Çözüm Gezgini'nde, Referanslar'a sağ tıklayın. Gözat'ı seçin, "IronQR.dll"

$999 'den başlayan lisanslar

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez