Background jobs for .NET
The scheduler never runs your code.
Axon is a background job scheduler for .NET: enqueue work from anywhere, and it runs on whichever service you point it at — reliably, in the right order, with a live dashboard to watch it happen. Retries, priority, recurring schedules, and multi-instance scale-out come built in.
What you get
Everything a background job needs, out of the box.
Enqueue a method call from any service. Axon takes care of getting it to the right place, at the right time, exactly once — and gives you a dashboard to watch it happen.
Run jobs anywhere
Enqueue from one service, execute on another — a worker fleet, a desktop app, a device on the factory floor. Deploy job code independently of the scheduler.
Instant dispatch
Jobs reach a connected client the moment they're due — no polling delay, no cron minimum granularity. Reconnects are automatic if a connection drops.
Automatic retries
A failed job retries on a configurable backoff. A client that disappears mid-job gets its work reclaimed and rescheduled automatically — nothing silently stalls.
Priority & queues
Mark urgent work High or Critical so it jumps the line, and route job types to dedicated named queues so unrelated workloads never compete for the same slot.
Recurring schedules
Cron-style recurring jobs, managed the same way as one-off work — same dashboard, same retry and priority rules, same everything.
Scale out safely
Run as many Axon.Server instances as you want behind a load balancer. Every job still dispatches exactly once, no matter how many instances are polling.
var jobId = await axonClient.EnqueueAsync<BillingJobs>(
x => x.ChargeInvoice(invoiceId),
new AxonEnqueueOptions
{
Priority = JobPriority.High,
QueueName = "billing",
});
One call to enqueue
Four lines, and it's scheduled, prioritized, and on the right queue.
Call EnqueueAsync with a strongly-typed method reference — no string job
names, no magic keys. Set a priority so urgent work gets seen sooner, and a queue name
so it lands on the worker fleet built to handle it. Everything else is Axon's job.
- Strongly typed — the compiler checks your job call, not a string
- Fire-and-forget or scheduled — run now, run later, or run on a recurring cadence
- Chainable — continue one job with another once its parent finishes
Built-in dashboard
See every job, server, and connected client — live.
Mount the dashboard at /axon and get a real-time view of your whole job
fleet: what's running, what's scheduled, what failed and why — with retry, delete, and
trigger controls, and optional sign-in with Admin/ReadOnly roles.
Bring your own database
Five storage backends. Pick whatever you already run.
Job state persists wherever your infrastructure already lives — SQL Server, PostgreSQL, MySQL, MongoDB, or SQLite for local development. Swap the package, not your application code.
Ready when you are
Enqueue your first job in about four lines.
Open-source, MIT-licensed, no telemetry phoning home. Read the source or start from the quickstart.