private void PendingJobsItemEnqueued(object sender, IJobDetail e) { if (_pendingJobs.TryDequeue(out var jobDetail)) { Task.Run(() => ExecuteJob(jobDetail)); } }
public async Task <IJobDetail> ScheduleJob(IJobDetail jobDetail) { jobDetail.Status = JobStatus.Pending; jobDetail.CreatedAt = DateTime.UtcNow; await Task.Run(() => { _pendingJobs.Enqueue(jobDetail); Task.Run(() => _eventManager.PublishEvent <JobCreatedEventArgs>(new JobCreatedEventArgs { JobDetail = jobDetail })); }); return(jobDetail); }
private async Task ExecuteJob(IJobDetail jobDetail) { var scheduler = await _schedulerFactory.GetScheduler(); var job = JobBuilder.Create <Crawler>() .WithIdentity(jobDetail.Id.ToString(), jobDetail.Name) .UsingJobData("Id", jobDetail.Id.ToString()) .UsingJobData("Name", jobDetail.Name) .UsingJobData("Url", jobDetail.Url) .UsingJobData("Status", (int)jobDetail.Status) .UsingJobData("CreatedAt", jobDetail.CreatedAt.ToString(CultureInfo.InvariantCulture)) .UsingJobData("CompletedAt", jobDetail.CompletedAt.ToString(CultureInfo.InvariantCulture)) .Build(); var trigger = TriggerBuilder.Create() .WithIdentity(jobDetail.Id.ToString(), jobDetail.Name) .StartNow() .Build(); await scheduler.ScheduleJob(job, trigger); await scheduler.Start(); }