System.Threading.Channels: адекватные lock-free очереди для producer/consumer
BlockingCollection<T> долгое время был стандартом для producer/consumer в .NET. Он работает, но построен на блокирующих примитивах — когда очередь пуста, читающий поток висит на Monitor.Wait() . В мире async/await это антипаттерн: заблокированный поток — потраченный ресурс. System.Threading.Channels грамотно решил эту проблему. Lock-free структуры данных, async API, контроль backpressure, интеграция с пайплайнами обработки данных. Это не замена BlockingCollection — это просто другой уровень. Разберём, как Channels устроены, когда их использовать, и какие паттерны они открывают.













