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);