Skip to main content

Scheduling

Scheduling allows for configuring jobs to run at specific intervals. The user can configure the interval for the job by selecting one of three predefined interval types: seconds, minutes, or Hours.

How to create a scheduled service​

In order to create a scheduled job it's necessary to implement IScheduledJob interface and then register it.

public class MyScheduledJob : IScheduledJob
{
public async Task RunAsync()
{
// Perform your scheduled job here
}
}
    // for interval schedule
await ProconTelApp.StartAsync(args,
services =>
{
services.AddScheduledJob<MyScheduledJob>().WithIntervalSchedule(7, IntervalType.Seconds);
});
// for cron schedule
await ProconTelApp.StartAsync(args,
services =>
{
services.AddScheduledJob<MyScheduledJob>().WithCronSchedule("0 0 1 * *");
});

This setup will execute MyScheduledJob every 7 seconds

Registration types​

There are two ways of defining the frequency of a scheduled job.

.WithCronSchedule - Defining frequency using cron expressions​

//Executes every day at 02:00 AM
services.AddScheduledJob<MyScheduledJob>().WithCronSchedule("0 0 2 * * ?");

//Executes every 5 minutes
services.AddScheduledJob<MyScheduledJob>().WithCronSchedule("* */5 * * * ?");

//Executes every Monday at 08:30 AM
services.AddScheduledJob<MyScheduledJob>().WithCronSchedule("0 30 8 * 1 ?");

If the cron expression is invalid, an exception will be thrown during application startup. To avoid this situation, we recommend following the cron documentation: https://www.quartz-scheduler.net/documentation/quartz-4.x/tutorial/crontrigger.html#format We strongly reccomend to use ? instead of * as sixth character.

.WithIntervalSchedule - Defining frequency in a convenient way​

//Executes every 10 seconds
services.AddScheduledJob<MyScheduledJob>().WithIntervalSchedule(10, IntervalType.Seconds);

//Executes every 5 minutes
services.AddScheduledJob<MyScheduledJob>().WithIntervalSchedule(5, IntervalType.Minutes);

//Executes every 1 hour
services.AddScheduledJob<MyScheduledJob>().WithIntervalSchedule(1, IntervalType.Hours);