CodeBlanks Logo Icon CodeBlanks

ConcurrentBag

C# kursu · Uzman · Ders 28/47

ConcurrentBag ile sırasız iş parçacığı güvenli çanta öğrenirsin.

ConcurrentBag

ConcurrentBag<T>, sırasız iş parçacığı güvenli bir çantadır. FIFO veya LIFO garantisi yoktur; her iş parçacığının yerel bir listesi vardır ve önce kendi listesinden çıkarır.

Aynı iş parçacığının hem ekleyip hem çıkardığı durumlar için en hızlı seçenektir. Sıra önemli değilse ve paralel üretim-tüketim yapılıyorsa ConcurrentBag iyi bir tercihtir.

Ne zaman ConcurrentBag?

ConcurrentBag'i sıralama önemli olmadığında ve aynı iş parçacığı genelde ekleyip çıkardığında kullan. Sıra önemliyse ConcurrentQueue veya ConcurrentStack seç.

Sırasız yapısı nedeniyle test ederken ToArray() ile diziye alıp OrderBy ile sıralamak çıktıyı deterministik yapar. Aksi halde öğelerin ekrana düşme sırası değişkendir.

Uygulama Çantaya ekle ve sıralı yazdır

Aşağıdaki bag boş. Add ile üç öğe ekle: "kayıt", "okuma", "yazma". Önce bag.Count'u yazdır. Sonra bag.ToArray().OrderBy(x => x) ile alfabetik sıralı her öğeyi yazdır.

Örnek çözümü göster
bag.Add("kayıt"); bag.Add("okuma"); bag.Add("yazma"); Console.WriteLine(bag.Count); Sonra foreach (var item in bag.ToArray().OrderBy(x => x)) Console.WriteLine(item);
Örnek çözüm:
using System;
using System.Collections.Concurrent;
using System.Linq;

class Program
{
    static void Main()
    {
        var bag = new ConcurrentBag<string>();
        bag.Add("kayıt");
        bag.Add("okuma");
        bag.Add("yazma");
        Console.WriteLine(bag.Count);
        foreach (var item in bag.ToArray().OrderBy(x => x))
        {
            Console.WriteLine(item);
        }
    }
}

Kendini test et

  1. ConcurrentBag'in sıralama garantisi nedir?

    • FIFO sıra garantisi
    • LIFO sıra garantisi
    • Sırasız, iş parçacığı güvenli
    • Sıralı (sorted)
    Cevabı göster

    Sırasız, iş parçacığı güvenli — Doğru. ConcurrentBag sırasızdır; sıra garantisi vermez.

  2. Çanta metotlarını eşleştir

    Add
    Çantaya öğe ekle
    TryTake
    Çantadan öğe çıkar
    Count
    Öğe sayısını ver
  3. Add çağrısını tamamla

    bag.____;
    Cevabı göster
    bag.Add("görev");

Uzman bölümündeki tüm dersler