This document outlines changes needed per version upgrade basis. You need to check the steps for each version you are jumping over. You should also check the complete change logopen in new window.

TIP

If you are a new user starting with the latest version, you don't need to follow this guide. Just jump right to the tutorial

Migrating from Version 3.x to 4.x

Tasks changed to ValueTask

In a majority of interfaces that previously returned or took a Task or Task<T> parameter, have been changed to a ValueTask or ValueTask<T>

In most cases, all you will need to do is adjust the signature from a Task to be a ValueTask

::: info Note the following restrictions when working with ValueTask: :::

The following operations should never be performed on a ValueTask<TResult> instance:

  • Awaiting the instance multiple times.
  • Calling AsTask multiple times.
  • Using .Result or .GetAwaiter().GetResult() when the operation hasn't yet completed, or using them multiple times.
  • Using more than one of these techniques to consume the instance.

For example, to migrate jobs:

public async Task Execute(IJobExecutionContext context)

becomes:

public async ValueTask Execute(IJobExecutionContext context)

For more information on ValueTasks please see Microsoftopen in new window

Logging

LibLog has been replaced with the Microsoft.Logging.Abstraction library. Reconfigure logging using a ILoggerFactory, an example, with a Microsoft.Logging.SimpleConsole logger:

var loggerFactory = LoggerFactory.Create(builder =>
    {
        builder
            .SetMinimumLevel(LogLevel.Debug)
            .AddSimpleConsole();
    });
LogProvider.SetLogProvider(loggerFactory);

See the Quartz.Examples project for examples on setting up Serilogopen in new window and Microsoft.Logging with Quartz.

An alternative approach is to configure the LoggerFactory via a HostBuilder ConfigureServices wire-up:

Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
  services.AddQuartz(q =>
        {
          q.SetLoggerFactory(loggerFactory);
        });
});

Further information on configuring Microsoft.Logging can be found at Microsoft docsopen in new window

JSON Serialization

To configure JSON serialization to be used in job store instead of old UseJsonSerializer you should now use either UseSystemTextJsonSerializer or UseNewtonsoftJsonSerializer and remove the old package reference Quartz.Serialization.Json (and if Newtonsoft used, reference Quartz.Serialization.Newtonsoft). Change was made to distinguish the two common serializers that are being used (System.Text.Json and JSON.NET).