ZeroAlloc.Scheduling.Generator
1.1.2
See the version list below for details.
dotnet add package ZeroAlloc.Scheduling.Generator --version 1.1.2
NuGet\Install-Package ZeroAlloc.Scheduling.Generator -Version 1.1.2
<PackageReference Include="ZeroAlloc.Scheduling.Generator" Version="1.1.2"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
<PackageVersion Include="ZeroAlloc.Scheduling.Generator" Version="1.1.2" />
<PackageReference Include="ZeroAlloc.Scheduling.Generator"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add ZeroAlloc.Scheduling.Generator --version 1.1.2
#r "nuget: ZeroAlloc.Scheduling.Generator, 1.1.2"
#:package ZeroAlloc.Scheduling.Generator@1.1.2
#addin nuget:?package=ZeroAlloc.Scheduling.Generator&version=1.1.2
#tool nuget:?package=ZeroAlloc.Scheduling.Generator&version=1.1.2
ZeroAlloc.Scheduling
ZeroAlloc.Scheduling is a source-generated background job scheduler for .NET 8 and .NET 10. Decorate any class with [Job] and the source generator wires up the executor, DI registration, and recurring startup automatically — no reflection, no convention scanning at runtime.
Install
The source generator is bundled into the main package — a single PackageReference is all you need:
dotnet add package ZeroAlloc.Scheduling
dotnet add package ZeroAlloc.Scheduling.InMemory # or EfCore / Redis
The standalone
ZeroAlloc.Scheduling.Generatorpackage is still published for backwards compatibility with existing direct PackageReferences, but new consumers should reference onlyZeroAlloc.Scheduling.
Example
// 1. Define a job — the generator picks it up automatically
[Job(Every = Every.Hour)]
public sealed class CleanupExpiredSessionsJob : IJob
{
private readonly ISessionRepository _repo;
public CleanupExpiredSessionsJob(ISessionRepository repo) => _repo = repo;
public async ValueTask ExecuteAsync(JobContext ctx, CancellationToken ct)
=> await _repo.DeleteExpiredAsync(ct);
}
// 2. Register — generated AddCleanupExpiredSessionsJob() wires executor + recurring startup
services.AddScheduling()
.WithInMemoryStore()
.AddCleanupExpiredSessionsJob();
// 3. Enqueue a one-off job from application code
public class OrderService(IScheduler scheduler)
{
public async Task CompleteOrderAsync(Order order, CancellationToken ct)
{
await ProcessAsync(order, ct);
await scheduler.EnqueueAsync(new SendOrderConfirmationJob(order.Id), ct);
}
}
Features
- Source generator —
[Job]on a class emits a typed executor, DI extension method, and optional recurring startup (IHostedService) - Recurring jobs —
[Job(Cron = "0 * * * *")]or[Job(Every = Every.Hour)]— scheduled via Cronos at startup - Retry with backoff — exponential retry up to
MaxAttempts(per-job or global); dead-letters after exhaustion - Multiple backends — InMemory (dev/test), EF Core (SQL Server / PostgreSQL / SQLite), Redis
- Dashboard — embedded HTML/JS dashboard via
app.MapJobsDashboard("/jobs") - Blazor component —
<JobsDashboard>Razor component for integration into Blazor apps - Mediator bridge —
[Job]+IRequest<Unit>auto-registersMediatorJobTypeExecutor<T>, routing execution through ZeroAlloc.Mediator pipeline behaviors - Native AOT compatible — no reflection at runtime; all dispatch resolved at compile time
Dashboard
An embedded HTML/JS dashboard — summary cards for each job state, a live-refreshing table with per-row requeue / delete actions, and fully responsive down to mobile widths.
app.MapJobsDashboard("/jobs");
// Optional: protect with auth
app.MapJobsDashboard("/jobs").RequireAuthorization("AdminPolicy");
Tablet (768 × 1024) and mobile (375 × 812) captures live in docs/screenshots/.
See Dashboard for the full endpoint reference and the Blazor component.
Packages
| Package | Description |
|---|---|
ZeroAlloc.Scheduling |
Core interfaces, worker service, scheduler |
ZeroAlloc.Scheduling.Generator |
Source generator (analyzer reference) |
ZeroAlloc.Scheduling.InMemory |
In-process store for development and testing |
ZeroAlloc.Scheduling.EfCore |
EF Core store (SQL Server, PostgreSQL, SQLite) |
ZeroAlloc.Scheduling.Redis |
Redis store for distributed deployments |
ZeroAlloc.Scheduling.Dashboard |
Embedded HTML dashboard (MapJobsDashboard) |
ZeroAlloc.Scheduling.Dashboard.Blazor |
Blazor component library |
ZeroAlloc.Scheduling.Mediator |
ZeroAlloc.Mediator bridge |
Documentation
| Page | Description |
|---|---|
| Getting Started | Install and schedule your first job in five minutes |
| Source Generator | [Job], Every, Cron, generated extension methods |
| Backends | InMemory, EF Core, and Redis store configuration |
| Dashboard | Embedded HTML dashboard and Blazor component |
| Mediator Bridge | Route job execution through ZeroAlloc.Mediator |
| Diagnostics | ZASCH001 compiler warning reference |
| Performance | Throughput, allocation profile, and tuning guide |
License
MIT
Learn more about Target Frameworks and .NET Standard.
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.2.0 | 85 | 5/14/2026 |
| 1.1.4 | 85 | 5/12/2026 |
| 1.1.3 | 86 | 5/7/2026 |
| 1.1.2 | 86 | 5/6/2026 |
| 1.1.1 | 93 | 5/3/2026 |
| 1.1.0 | 86 | 5/1/2026 |
| 1.0.4 | 84 | 5/1/2026 |
| 1.0.3 | 100 | 4/30/2026 |
| 1.0.2 | 95 | 4/29/2026 |
| 1.0.1 | 87 | 4/29/2026 |
| 1.0.0 | 96 | 4/28/2026 |
| 0.3.1 | 91 | 4/28/2026 |
| 0.3.0 | 92 | 4/28/2026 |
| 0.2.2 | 95 | 4/28/2026 |
| 0.2.1 | 90 | 4/26/2026 |
| 0.2.0 | 99 | 4/26/2026 |
| 0.1.6 | 107 | 4/25/2026 |
| 0.1.5 | 95 | 4/25/2026 |
| 0.1.4 | 99 | 4/24/2026 |
| 0.1.3 | 97 | 4/23/2026 |