Ejemplo n.º 1
0
        public void JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException)
        {
            var taskId = Guid.Empty;

            if (Guid.TryParse(Name, out taskId))
            {
                using (TaskDbContext db = new TaskDbContext())
                {
                    var task = db.Task.FirstOrDefault(m => m.Id == taskId && m.Status > (int)TaskStatus.Deleted);
                    if (task == null)
                    {
                        return;
                    }
                    var stop = false;
                    if (jobException == null)
                    {
                        var utcDate     = context.Trigger.GetNextFireTimeUtc();
                        var nextRunTime = utcDate.HasValue ? TimeZoneInfo.ConvertTimeFromUtc(utcDate.Value.DateTime, TimeZoneInfo.Local) : new DateTime?();

                        task.LastRunTime   = DateTime.Now;
                        task.TotalRunCount = task.TotalRunCount + 1;
                        if (task.RunMoreTimes)
                        {
                            task.NextRunTime = nextRunTime;
                            task.Status      = (int)TaskStatus.Running;
                        }
                        else
                        {
                            stop = true;
                        }
                    }
                    else
                    {
                        //对只执行 一次并且本次抢锁失败的任务,在这里停止掉
                        if (jobException.Message == "lockfailed" && !task.RunMoreTimes)
                        {
                            stop = true;
                        }
                    }
                    if (stop)
                    {
                        QuartzManager.Stop(taskId);
                        task.Status      = (int)TaskStatus.Stop;
                        task.NextRunTime = null;
                    }
                    db.SaveChanges();
                }
            }
        }