ConcurrentBag
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
-
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.
-
Çanta metotlarını eşleştir
- Add
- Çantaya öğe ekle
- TryTake
- Çantadan öğe çıkar
- Count
- Öğe sayısını ver
-
Add çağrısını tamamla
bag.____;Cevabı göster
bag.Add("görev");