Open.ChannelExtensions
2.6.0
See the version list below for details.
dotnet add package Open.ChannelExtensions --version 2.6.0
NuGet\Install-Package Open.ChannelExtensions -Version 2.6.0
<PackageReference Include="Open.ChannelExtensions" Version="2.6.0" />
<PackageVersion Include="Open.ChannelExtensions" Version="2.6.0" />
<PackageReference Include="Open.ChannelExtensions" />
paket add Open.ChannelExtensions --version 2.6.0
#r "nuget: Open.ChannelExtensions, 2.6.0"
#:package Open.ChannelExtensions@2.6.0
#addin nuget:?package=Open.ChannelExtensions&version=2.6.0
#tool nuget:?package=Open.ChannelExtensions&version=2.6.0
Open.ChannelExtensions
A set of extensions for optimizing/simplifying System.Threading.Channels usage.
Highlights
Being able to define an asynchronous pipeline with best practice usage using simple expressive syntax:
await Channel
.CreateBounded<T>(10)
.SourceAsync(source /* IEnumerable<Task<T>> */)
.PipeAsync(
maxConcurrency: 2,
capacity: 5,
transform: asyncTransform01)
.Pipe(transform02, /* capacity */ 3)
.ReadAllAsync(finalTransformedValue => {
// Do something async with each final value.
});
await source /* IEnumerable<T> */
.ToChannel(boundedSize: 10, singleReader: true)
.PipeAsync(asyncTransform01, /* capacity */ 5)
.Pipe(
maxConcurrency: 2,
capacity: 3,
transform: transform02)
.ReadAll(finalTransformedValue => {
// Do something with each final value.
});
Examples
Reading (until the channel is closed)
One by one read each entry from the channel
await channel.ReadAll(
entry => { /* Processing Code */ });
await channel.ReadAll(
(entry, index) => { /* Processing Code */ });
await channel.ReadAllAsync(
async entry => { await /* Processing Code */ });
await channel.ReadAllAsync(
async (entry, index) => { await /* Processing Code */ });
Read concurrently each entry from the channel
await channel.ReadAllConcurrently(
maxConcurrency,
entry => { /* Processing Code */ });
await channel.ReadAllConcurrentlyAsync(
maxConcurrency,
async entry => { await /* Processing Code */ });
Writing
If complete is true, the channel will be closed when the source is empty.
Dump a source enumeration into the channel
// source can be any IEnumerable<T>.
await channel.WriteAll(source, complete: true);
// source can be any IEnumerable<Task<T>> or IEnumerable<ValueTask<T>>.
await channel.WriteAllAsync(source, complete: true);
Synchronize reading from the source and process the results concurrently
// source can be any IEnumerable<Task<T>> or IEnumerable<ValueTask<T>>.
await channel.WriteAllConcurrentlyAsync(
maxConcurrency, source, complete: true);
Pipelining / Transforming
Transform and buffer entries
// Transform values in a source channel to new unbounded channel.
var transformed = channel.Pipe(
async value => /* transformation */);
// Transform values in a source channel to new unbounded channel with a max concurrency of X.
const X = 4;
var transformed = channel.Pipe(
X, async value => /* transformation */);
// Transform values in a source channel to new bounded channel bound of N entries.
const N = 5;
var transformed = channel.Pipe(
async value => /* transformation */, N);
// Transform values in a source channel to new bounded channel bound of N entries with a max concurrency of X.
const X = 4;
const N = 5;
var transformed = channel.Pipe(
X, async value => /* transformation */, N);
// or
transformed = channel.Pipe(
maxConcurrency: X,
capacity: N,
transform: async value => /* transformation */);
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- System.Threading.Channels (>= 4.6.0)
-
.NETStandard 2.1
- System.Threading.Channels (>= 4.6.0)
NuGet packages (10)
Showing the top 5 NuGet packages that depend on Open.ChannelExtensions:
| Package | Downloads |
|---|---|
|
Indice.Features.Identity.SignInLogs
Package Description |
|
|
Indice.Features.Messages.Core
Package Description |
|
|
Open.Database.Extensions.Channel
Database extensions for pipelining data through channels. Includes Open.Database.Extensions.Core. |
|
|
DataPipe.Core
Provides AWS support to the DataPipe platform. Reference this package if you need to read or write to S3 from a data pipe script |
|
|
ProjectoR.Core
A simple way of writing projections in .NET. |
GitHub repositories (3)
Showing the top 3 popular GitHub repositories that depend on Open.ChannelExtensions:
| Repository | Stars |
|---|---|
|
oskardudycz/EventSourcing.NetCore
Examples and Tutorials of Event Sourcing in .NET
|
|
|
mehdihadeli/food-delivery-microservices
🍔 A practical and cloud-native food delivery microservices, built with .Net Aspire, .Net 9, MassTransit, Domain-Driven Design, CQRS, Vertical Slice Architecture, Event-Driven Architecture, and the latest technologies.
|
|
|
Excel-DNA/Samples
Various sample projects and snippets related to Excel-DNA
|
| Version | Downloads | Last Updated |
|---|---|---|
| 9.1.3 | 4,958 | 2/2/2026 |
| 9.1.2 | 281 | 1/31/2026 |
| 9.1.1 | 30,930 | 11/18/2025 |
| 9.1.0 | 174,530 | 4/11/2025 |
| 9.0.0 | 123,547 | 11/18/2024 |
| 8.6.0 | 14,883 | 11/13/2024 |
| 8.5.0 | 45,112 | 9/22/2024 |
| 8.4.3 | 100,681 | 7/8/2024 |
| 8.4.2 | 8,369 | 7/1/2024 |
| 8.4.1 | 2,816 | 6/26/2024 |
| 8.4.0 | 1,771 | 6/26/2024 |
| 8.3.0 | 102,040 | 5/7/2024 |
| 8.2.0 | 2,528 | 5/5/2024 |
| 7.3.0 | 1,764 | 9/22/2024 |
| 7.2.0 | 1,772 | 7/8/2024 |
| 7.1.0 | 1,775 | 6/26/2024 |
| 6.6.0 | 1,799 | 9/22/2024 |
| 6.5.0 | 1,785 | 7/8/2024 |
| 6.4.0 | 1,776 | 6/26/2024 |
| 2.6.0 | 2,693 | 10/20/2019 |
Support for .NET Standard 2.1 and IAsyncEnumerable.