У меня проблемы с CronJobs. Я пробовал много кодов, но ничего не работает. Я действительно не понимаю причину. вот мой код
public class CronJobServices : BackgroundService
{
private CrontabSchedule _schedule;
private DateTime _nextRun;
private string Schedule => "0/20 * * ? * * *"; //Runs every 20 seconds
public CronJobServices()
{
_schedule = CrontabSchedule.Parse(Schedule, new CrontabSchedule.ParseOptions { IncludingSeconds = true });
_nextRun = _schedule.GetNextOccurrence(DateTime.Now);
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
do
{
var now = DateTime.Now;
var nextrun = _schedule.GetNextOccurrence(now);
if (now > _nextRun)
{
Process();
_nextRun = _schedule.GetNextOccurrence(DateTime.Now);
}
await Task.Delay(5000, stoppingToken); //5 seconds delay
}
while (!stoppingToken.IsCancellationRequested);
}
private void Process()
{
InfoServer.SendMail("mymail@gmail.com", "Hello", "CronJobServices");
}
}
В Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddSingleton<CronJobServices>();
}
InfoServer.SendMail - это метод, который просто отправляет почту и работает нормально, я использую много по другой причине .
Я даже пытался использовать IHostedService, но ничего не работает. Есть идеи?
РЕДАКТИРОВАТЬ: CrontabSchedule пришел из NCrontab NUGet