ConcurrentQueue
ConcurrentQueue ile iş parçacığı güvenli kuyruğu öğrenirsin.
ConcurrentQueue
ConcurrentQueue<T>, iş parçacığı güvenli ilk-giren-ilk-çıkar (FIFO) kuyruğudur. Birden çok iş parçacığı aynı anda Enqueue ve TryDequeue çağırabilir; içerik kilitlenmeden tutarlı kalır.
Arka planda kilit gerektirmeyen (lock-free) bir bağlı liste kullanır. Üretici-tüketici senaryolarında, iş parçacıkları görevleri kuyruğa ekler ve havuzdan çıkarır.
TryDequeue ve TryPeek
TryDequeue(out T item) kuyruğun başından bir öğe çıkarır ve true döndürür; kuyruk boşsa false döner, exception fırlatmaz. Bu, boş kuyruğu güvenle yoklamanın yoludur.
TryPeek(out T item) ise öğeyi çıkarmadan başa bakar. Döngüde while (queue.TryDequeue(out var x)) ile tüm öğeleri sırayla boşaltabilirsin.
Uygulama Kuyruğa ekle ve boşalt
Aşağıdaki queue boş. Enqueue ile üç öğe ekle: "a", "b", "c". Sonra while (queue.TryDequeue(out var item)) döngüsüyle her öğeyi Console.WriteLine(item) ile yazdır.
Örnek çözümü göster
queue.Enqueue("a"); queue.Enqueue("b"); queue.Enqueue("c"); Sonra while (queue.TryDequeue(out var item)) Console.WriteLine(item);
Örnek çözüm:
using System;
using System.Collections.Concurrent;
class Program
{
static void Main()
{
var queue = new ConcurrentQueue<string>();
queue.Enqueue("a");
queue.Enqueue("b");
queue.Enqueue("c");
while (queue.TryDequeue(out var item))
{
Console.WriteLine(item);
}
}
}
Kendini test et
-
Enqueue çağrısını tamamla
queue.____;Cevabı göster
queue.Enqueue("görev"); -
ConcurrentQueue'den öğe çıkarmak için hangi metot kullanılır?
- Pop
- Remove
- Take
- TryDequeue
Cevabı göster
TryDequeue — Doğru. TryDequeue baştaki öğeyi güvenle çıkarır.
-
Kuyruk metotlarını eşleştir
- Enqueue
- Kuyruğun sonuna ekle
- TryDequeue
- Baştan çıkar
- TryPeek
- Çıkarmadan başa bak