Josupeit.Practices.Schedulers.Channel
1.0.24
Prefix Reserved
dotnet add package Josupeit.Practices.Schedulers.Channel --version 1.0.24
NuGet\Install-Package Josupeit.Practices.Schedulers.Channel -Version 1.0.24
<PackageReference Include="Josupeit.Practices.Schedulers.Channel" Version="1.0.24" />
<PackageVersion Include="Josupeit.Practices.Schedulers.Channel" Version="1.0.24" />
<PackageReference Include="Josupeit.Practices.Schedulers.Channel" />
paket add Josupeit.Practices.Schedulers.Channel --version 1.0.24
#r "nuget: Josupeit.Practices.Schedulers.Channel, 1.0.24"
#:package Josupeit.Practices.Schedulers.Channel@1.0.24
#addin nuget:?package=Josupeit.Practices.Schedulers.Channel&version=1.0.24
#tool nuget:?package=Josupeit.Practices.Schedulers.Channel&version=1.0.24
Josupeit.Practices.Schedulers.Channel
When you need more control over how work is executed — ordering, bounded concurrency, or the ability to pause and resume — ChannelScheduler is the right tool. It backs the IScheduler interface with System.Threading.Channels, processing items in FIFO order across a configurable number of concurrent consumers. The queue itself is unbounded: submitting never waits.
Because it extends AsyncSchedulerService, it is a full-featured background service as well as a scheduler. It must be started before you submit work and stopped when you are done. Stopping is always graceful: pending items are declined, and running items are given time to finish before they are canceled.
dotnet add package Josupeit.Practices.Schedulers.Channel
All types live in the Josupeit.Practices.Schedulers namespace, shared by every Schedulers package; the package name's .Channel suffix is not part of it.
How to use
var options = new ChannelSchedulerOptions
{
// Run items one at a time for strict sequential ordering.
DegreeOfParallelism = 1,
// Give running items up to five seconds to finish when the scheduler is stopped.
GracefulStopDelay = TimeSpan.FromSeconds(5),
};
var scheduler = new ChannelScheduler(options);
await scheduler.StartAsync();
// Both sync and async work items can be submitted.
scheduler.Schedule(() => ProcessItem());
await scheduler.ScheduleAsync(async ct => await ProcessItemAsync(ct), cancellationToken);
// Pause processing without dropping items already in the queue.
await scheduler.PauseAsync();
await scheduler.ResumeAsync();
// Stop gracefully — pending items are declined and running items are given GracefulStopDelay to finish.
await scheduler.StopAsync();
Options reference
| Property | Default | Description |
|---|---|---|
DegreeOfParallelism |
Environment.ProcessorCount |
Number of work items that may run concurrently. Set to 1 for strict sequential execution. |
GracefulStopDelay |
TimeSpan.FromSeconds(3) |
How long running items keep going after StopAsync is called before their token is signaled; StopAsync still waits for them to return. Set to TimeSpan.Zero to signal immediately, or to a negative value to never signal and wait indefinitely. |
| 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 is compatible. 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 is compatible. 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. |
-
.NETCoreApp 3.0
- Josupeit.Practices.Schedulers.Core (>= 1.0.0 && < 2.0.0)
- Josupeit.Practices.Services (>= 1.0.0 && < 2.0.0)
- Nito.AsyncEx.Coordination (>= 5.0.0 && < 6.0.0)
-
.NETStandard 2.0
- Josupeit.Practices.Schedulers.Core (>= 1.0.0 && < 2.0.0)
- Josupeit.Practices.Services (>= 1.0.0 && < 2.0.0)
- Nito.AsyncEx.Coordination (>= 5.0.0 && < 6.0.0)
- System.Threading.Channels (>= 4.5.0 && < 8.0.0)
-
.NETStandard 2.1
- Josupeit.Practices.Schedulers.Core (>= 1.0.0 && < 2.0.0)
- Josupeit.Practices.Services (>= 1.0.0 && < 2.0.0)
- Nito.AsyncEx.Coordination (>= 5.0.0 && < 6.0.0)
- System.Threading.Channels (>= 4.5.0 && < 8.0.0)
-
net8.0
- Josupeit.Practices.Schedulers.Core (>= 1.0.0 && < 2.0.0)
- Josupeit.Practices.Services (>= 1.0.0 && < 2.0.0)
- Nito.AsyncEx.Coordination (>= 5.0.0 && < 6.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
- Adds llms.txt and llms-full.txt for every package, a root index, and context7.json
- Corrects the package READMEs against the verified behavior
- Fixes scheduler dispatch, stop, and enqueue races and supports the Unsafe families on .NET Framework
- Generates T4 output per target framework, packs the llms files, and binds dependency ranges to the referenced version
- Adds PublicApiAnalyzers with shipped API baseline
- Fixes all diagnostics from the new analyzers
- Regenerates lock files for new analyzer packages
- Adds analyzers, .editorconfig, and banned API enforcement