Channel, .NET’in System.Threading.Channels yapısı üzerinden sağlanan, yüksek performanslı, thread-safe ve tamamen asenkron bir producer → consumer kuyruğudur.
Farklı bileşenlerin güvenli biçimde veri alışverişi yapmasını sağlayan, modern ve kilitsiz (lock-free) bir iş akışı mekanizmasıdır.
- Üretici (producer) ile tüketici (consumer) arasındaki veri akışını güvenli biçimde yönetir.
- Arka plan işleri, mesaj işleme, sıraya alma gibi süreçlerde kullanılır.
- Asenkron çalışarak sistemi bloklamaz.
- Çoklu üretici ve tek/çoklu tüketici yapıları sorunsuz destekler.
- Backpressure (kuyruk dolunca üreticiyi bekletme) sağlar.
- Diğer thread-safe queue yapılarından daha hızlıdır (lock-free optimizasyonlar).
- Producer, Channel’a veri yazar.
- Veri Channel içinde sıraya alınır.
- Consumer, Channel’dan veriyi okur ve işler.
- Üretici ve tüketici birbirinden tamamen bağımsız şekilde çalışır.
Bu yapı sayesinde iş yükü dengelenir ve yoğunluk altında sistem daha kararlı çalışır.
| Özellik | Event | Channel |
|---|---|---|
| Çalışma şekli | “Olay oluştu, hemen tetikle” | “Veriyi sıraya al, doğru zamanda tüket” |
| Senkron / Asenkron | Genelde senkron veya fire-and-forget | Tamamen asenkron |
| İş garantisi | Dinleyici yoksa olay kaybolur | Veri hiçbir zaman kaybolmaz (WriteAsync bekler) |
| Queue mantığı | Yok | Var (producer → queue → consumer) |
| Yük yönetimi | Trafik artarsa kontrol yok | Backpressure ile üretici bekletilir |
| Kullanım amacı | Olay bildirme | İş akışı / job işleme / pipeline |
- Event → Bildirim, “hemen çalıştır”.
- Channel → Kuyruk, “sıraya al ve güvenli şekilde işle”.
Event anlık bir tetikleme mekanizmasıdır.
Channel ise sürdürülebilir, kontrollü bir iş akışı oluşturur.