Кронджоб в ASP. NET Core 2.1 - PullRequest
       9

Кронджоб в ASP. NET Core 2.1

1 голос
/ 28 апреля 2020

У меня проблемы с 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

...