-1

I have a job and I want to change that interval dynamically with a special formula. I rescheduled it but it doesn't work correctly.

I create the job in a hosted service, like this :

 var gap = handler.GetRestTime();

            var jobDataMap = new Dictionary<string, PlatformHandler>()
            {
                {nameof(PlatformHandler),handler}
            };

            IJobDetail job = JobBuilder.Create<ParserJob>()
                .UsingJobData(new JobDataMap(jobDataMap))
                .WithIdentity(new JobKey(coinId.ToString()))
                .Build();

            ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity(new TriggerKey(coinId.ToString()))
                .StartNow()
                .WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromMilliseconds(gap))
                .RepeatForever())
            .ForJob(job)
            .Build();


            await scheduler.ScheduleJob(job, trigger);

And this is my job class


 public async Task Execute(IJobExecutionContext context)
        {
            var handler = (PlatformHandler)context.JobDetail.JobDataMap[nameof(PlatformHandler)];

            if (handler is null)
                _logger.LogError("Handler is null , data didn't receive, HandlerKey={HandlerKey}", handler.Id);

            if (handler.State == HandlerState.Running)
                await _parserService.Parser(handler);


            var jobkey = new JobKey(handler.Id.ToString());

            var triggers = await context.Scheduler.GetTriggersOfJob(jobkey);
            var trigger = triggers.Single();

            var updatedTrigger = trigger.GetTriggerBuilder().WithSimpleSchedule(x => x.WithIntervalInMinutes(1)).Build();

            await context.Scheduler.RescheduleJob(trigger.Key, updatedTrigger);

        }
    

For example, I want to change my trigger interval to 1 minute.

But it runs like before the interval change. Thank you in advance.

0 Answers0