Helpers and adapters for working with BlockingCollection<T> in modern .NET applications.
Find it on nuget!
PM>Install-Package BlockingCollectionExtensions -Version 7.0.1- Simpler
IProducerConsumerCollection<T>adapters with better defaults TimeSpan-based overloads and optional cancellation tokensIAsyncEnumerable<T>support for async-first producer pipelines- Modernized package metadata, symbols, readme packaging, and CI
usingSystem.Collections.Concurrent;usingBlockingCollectionExtensions;varcollection=newBlockingCollection<int>();collection.AddFromEnumerable(new[]{1,2,3},completeAddingWhenDone:true);usingSystem.Collections.Concurrent;usingBlockingCollectionExtensions;varcollection=newBlockingCollection<int>();awaitcollection.AddFromAsyncEnumerable(GetItemsAsync(),completeAddingWhenDone:true);staticasyncIAsyncEnumerable<int>GetItemsAsync(){yieldreturn1;awaitTask.Yield();yieldreturn2;}usingSystem.Collections.Concurrent;usingBlockingCollectionExtensions;varcollection=newBlockingCollection<int>();varadapter=collection.AsProducerConsumerCollection(TimeSpan.FromMilliseconds(250));adapter.TryAdd(42);adapter.TryTake(outvarvalue);net8.0netstandard2.1
BlockingCollection<T>is still useful for some producer/consumer scenarios, especially when interop with older code matters.- For brand new async-heavy pipelines,
System.Threading.Channelsmay still be the better default choice.
