NCronJob 2.6.4-preview

This is a prerelease version of NCronJob.
There is a newer version of this package available.
See the version list below for details.
dotnet add package NCronJob --version 2.6.4-preview
NuGet\Install-Package NCronJob -Version 2.6.4-preview
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="NCronJob" Version="2.6.4-preview" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add NCronJob --version 2.6.4-preview
#r "nuget: NCronJob, 2.6.4-preview"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install NCronJob as a Cake Addin
#addin nuget:?package=NCronJob&version=2.6.4-preview&prerelease

// Install NCronJob as a Cake Tool
#tool nuget:?package=NCronJob&version=2.6.4-preview&prerelease

<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 has moved from LinkDotNet.NCronJob to just NCronJob! Please uninstall the old package and install the new one. Learn more about it here: https://github.com/NCronJob-Dev/NCronJob/discussions/66

.NET NuGet NuGet

NCronJob

A Job Scheduler sitting on top of IHostedService in .NET.

Often, one finds themselves between the simplicity of BackgroundService/IHostedService and the complexity of a full-blown scheduler like Hangfire or Quartz. This library aims to fill that gap by providing a simple and easy-to-use job scheduler that can be used in any .NET application and feels "native".

There's no need to set up a database—just schedule your tasks right away! The library provides two ways of scheduling jobs:

  1. Instant jobs - Run a job immediately (or with a small delay, or at a specific date and time).
  2. 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!
  • Integration with 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 a one-liner.
  • Startup jobs - Run a job when the application starts.

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 supports notifying when a job is done, but not the progress of the job itself.

Short example

There are two ways to define 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

  1. Import the namespace (or let your IDE do the dirty work)
using NCronJob;
  1. 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;
    }
}
  1. 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");
    }));
  1. 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");
}

Running a Job at Startup

If you want a job to run when the application starts, you can configure it to run at startup using the RunAtStartup method. Here is an example:

builder.Services.AddNCronJob(options =>
{
    options.AddJob<MyJob>()
           .RunAtStartup();
});

In this example, the job of type 'MyJob' will be executed as soon as the application starts. This is useful for tasks that need to run immediately upon application startup, such as initial data loading or cleanup tasks.

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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
2.8.2 59 6/18/2024
2.8.1 55 6/18/2024
2.8.0 53 6/18/2024
2.7.10-preview 46 6/18/2024
2.7.9-preview 49 6/17/2024
2.7.8-preview 54 6/8/2024
2.7.7-preview 51 6/8/2024
2.7.6-preview 60 6/6/2024
2.7.5-preview 39 6/4/2024
2.7.4 100 6/3/2024
2.7.3 82 6/1/2024
2.7.1-preview 46 6/1/2024
2.7.0-preview 39 6/1/2024
2.6.5-preview 47 5/30/2024
2.6.4-preview 42 5/29/2024
2.6.3-preview 65 5/29/2024
2.6.2-preview 57 5/28/2024
2.6.1 262 5/25/2024
2.5.0 429 5/21/2024

Changes in NCronJob

See the full changelog at https://github.com/NCronJob-Dev/NCronJob/releases