NCronJob 2.5.0
See the version list below for details.
dotnet add package NCronJob --version 2.5.0
NuGet\Install-Package NCronJob -Version 2.5.0
<PackageReference Include="NCronJob" Version="2.5.0" />
paket add NCronJob --version 2.5.0
#r "nuget: NCronJob, 2.5.0"
// Install NCronJob as a Cake Addin #addin nuget:?package=NCronJob&version=2.5.0 // Install NCronJob as a Cake Tool #tool nuget:?package=NCronJob&version=2.5.0
<h1 align="center">NCronJob</h1>
<p align="center"> <img src="assets/logo_small.png" alt="logo" width="120px" height="120px"/> <br> <em>Scheduling made easy</em> <br> </p>
đŸ“£ANNOUNCEMENTđŸ“£
The library moved from LinkDotNet.NCronJob
to just NCronJob
!
Please uninstall the old package and install the new one.
NCronJob
A Job Scheduler sitting on top of IHostedService
in dotnet.
Often times one finds themself between the simplicity of the BackgroundService
/IHostedService
and the complexity of
a full-blown Hangfire
or Quartz
scheduler.
This library aims to fill that gap by providing a simple and easy to use job scheduler that can be used in any dotnet
application and feels "native".
So no need for setting up a database, just schedule your stuff right away! The library gives you two ways of scheduling jobs:
- Instant jobs - just run a job right away (or with a small delay; or with a given date and time)
- Cron jobs - schedule a job using a cron expression
The whole documentation can be found here: NCronJob Documentation
Features
- The ability to schedule jobs using a cron expression
- The ability to instantly run a job
- Parameterized jobs - instant as well as cron jobs!
- Integrated in ASP.NET - Access your DI container like you would in any other service
- Get notified when a job is done (either successfully or with an error).
- Retries - If a job fails, it will be retried.
- The job scheduler supports TimeZones. Defaults to UTC time.
- Minimal API for Jobs - implement jobs in an oneliner
Not features
As this is a simple scheduler, some features are not included by design. If you need these features, you might want to
look into a more advanced scheduler like Hangfire
or Quartz
.
- Job persistence - Jobs are not persisted between restarts of the application.
- Job history - There is no history of jobs that have been run.
- Progress state - There is no way to track the progress of a job. The library will support notifying when a job is done, but not the progress of the job itself.
Short example
There are two ways of defining a job.
Minimal Job API
You can use this library in a simple one-liner:
builder.Services.AddNCronJob((ILoggerFactory factory, TimeProvider timeProvider) =>
{
var logger = factory.CreateLogger("My Anonymous Job");
logger.LogInformation("Hello World - The current date and time is {Time}", timeProvider.GetLocalNow());
}, "*/5 * * * * *");
With this simple lambda, you can define a job that runs every 5 seconds. Pass in all dependencies, just like you would with a Minimal API.
Via the IJob
interface
- Import the namespace (or let your IDE do the dirty work)
using NCronJob;
- Create a job
public class PrintHelloWorld : IJob
{
private readonly ILogger<PrintHelloWorld> logger;
public PrintHelloWorld(ILogger<PrintHelloWorld> logger)
{
this.logger = logger;
}
public Task RunAsync(JobExecutionContext context, CancellationToken token)
{
logger.LogInformation("Hello World");
logger.LogInformation("Parameter: {Parameter}", context.Parameter);
return Task.CompletedTask;
}
}
- Register the NCronJob and the job in your
Program.cs
builder.Services.AddNCronJob(options =>
options.AddJob<PrintHelloWorld>(j =>
{
// Every minute and optional parameter
j.WithCronExpression("* * * * *")
.WithParameter("Hello World");
}));
- Run your application and see the magic happen
Triggering an instant job
If the need arises and you want to trigger a job instantly, you can do so:
public class MyService
{
private readonly IInstantJobRegistry jobRegistry;
public MyService(IInstantJobRegistry jobRegistry) => this.jobRegistry = jobRegistry;
public void MyMethod() => jobRegistry.RunInstantJob<MyJob>("I am an optional parameter");
}
Support & Contributing
Thanks to all contributors and people that are creating bug-reports and valuable input:
<a href="https://github.com/NCronJob-Dev/NCronJob/graphs/contributors"> <img src="https://contrib.rocks/image?repo=NCronJob-Dev/NCronJob" alt="Supporters" /> </a>
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | 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 is compatible. |
-
net8.0
- Cronos (>= 0.8.4)
- Microsoft.Extensions.Hosting (>= 8.0.0)
- Polly (>= 8.4.0)
-
net9.0
- Cronos (>= 0.8.4)
- Microsoft.Extensions.Hosting (>= 8.0.0)
- Polly (>= 8.4.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on NCronJob:
Repository | Stars |
---|---|
linkdotnet/Blog
A blog (engine) completely written in C# and Blazor. It aims to be a simple use and easy to extend platform. Blogposts are written in Markdown and are rendered to HTML. This gives all the flexibility needed to express yourself but also have an easy way of creating posts in the first place.
|
Version | Downloads | Last updated |
---|---|---|
3.3.8 | 449 | 11/16/2024 |
3.3.7-preview | 62 | 11/16/2024 |
3.3.6-preview | 62 | 11/16/2024 |
3.3.5 | 456 | 11/4/2024 |
3.3.4 | 89 | 11/3/2024 |
3.3.3 | 137 | 10/31/2024 |
3.3.2 | 184 | 10/27/2024 |
3.3.1-preview | 102 | 10/26/2024 |
3.3.0-preview | 76 | 10/20/2024 |
3.2.0 | 301 | 10/19/2024 |
3.1.3 | 113 | 10/17/2024 |
3.1.2-preview | 117 | 10/15/2024 |
3.1.1-preview | 71 | 10/14/2024 |
3.1.0-preview | 64 | 10/14/2024 |
3.0.3 | 442 | 9/15/2024 |
3.0.2-preview | 166 | 8/29/2024 |
3.0.1-preview | 116 | 8/18/2024 |
3.0.0-preview | 106 | 7/21/2024 |
2.8.6 | 436 | 8/29/2024 |
2.8.5 | 128 | 8/18/2024 |
2.8.4 | 1,302 | 6/23/2024 |
2.8.3 | 112 | 6/20/2024 |
2.8.2 | 148 | 6/18/2024 |
2.8.1 | 105 | 6/18/2024 |
2.8.0 | 100 | 6/18/2024 |
2.7.10-preview | 93 | 6/18/2024 |
2.7.9-preview | 95 | 6/17/2024 |
2.7.8-preview | 85 | 6/8/2024 |
2.7.7-preview | 79 | 6/8/2024 |
2.7.6-preview | 87 | 6/6/2024 |
2.7.5-preview | 68 | 6/4/2024 |
2.7.4 | 147 | 6/3/2024 |
2.7.3 | 112 | 6/1/2024 |
2.7.1-preview | 61 | 6/1/2024 |
2.7.0-preview | 56 | 6/1/2024 |
2.6.5-preview | 61 | 5/30/2024 |
2.6.4-preview | 57 | 5/29/2024 |
2.6.3-preview | 91 | 5/29/2024 |
2.6.2-preview | 82 | 5/28/2024 |
2.6.1 | 314 | 5/25/2024 |
2.5.0 | 778 | 5/21/2024 |
Changes in NCronJob
### Changed
- Instant jobs are executed with the highest priority.
### Fixed
- If an instant job is executed that is not registered, it will throw an exception instead of silently ignoring it.
See the full changelog at https://github.com/NCronJob-Dev/NCronJob/releases