예제 #1
0
        public ScheduleJob AddJob(ScheduleTask task, DateTime executionTime, bool doRepeat, int? repeatPeriod, bool tryRecover)
        {
            _log.Write("Добавление нового таска " + task.Name);
            ScheduleJob newJob = new ScheduleJob
                                     {
                                         CreationDate = DateTime.Now,
                                         ExecutionDate = DateTime.Now,
                                         NextExecutionDate = executionTime,
                                         Task = task.Serialize(),
                                         State = (byte)JobState.ReadyToStart,
                                         RepeatPeriod = repeatPeriod,
                                         DoRepeat = doRepeat,
                                         TryRecover = tryRecover,
                                         IsUnique = task.IsUnique,
                                         Title = task.Name,
                                         Type = task.GetType().FullName
                                     };

            if (newJob.IsUnique)
            {
                var oldjob = DataService.PerThread.ScheduleJobSet.FirstOrDefault(x => x.Type == newJob.Type && (x.State == (byte)JobState.ReadyToStart || x.State == (byte)JobState.ReadyToRecover || x.State == (byte)JobState.Started));
                if (oldjob != null)
                {
                    if (oldjob.State == (byte)JobState.Started)
                    {
                    }
                    else
                    {
                        oldjob.RepeatPeriod = newJob.RepeatPeriod;
                        oldjob.DoRepeat = newJob.DoRepeat;
                        oldjob.TryRecover = newJob.TryRecover;
                        oldjob.Title = newJob.Title;
                        DataService.PerThread.SaveChanges();
                    }

                    return oldjob;
                }
            }

            SaveJobsToDb(newJob);
            return newJob;
        }
예제 #2
0
        public ScheduleJob AddJob(ScheduleTask task, DateTime executionTime, bool doRepeat, int?repeatPeriod, bool tryRecover)
        {
            _log.Write("Добавление нового таска " + task.Name);
            ScheduleJob newJob = new ScheduleJob
            {
                CreationDate      = DateTime.Now,
                ExecutionDate     = DateTime.Now,
                NextExecutionDate = executionTime,
                Task         = task.Serialize(),
                State        = (byte)JobState.ReadyToStart,
                RepeatPeriod = repeatPeriod,
                DoRepeat     = doRepeat,
                TryRecover   = tryRecover,
                IsUnique     = task.IsUnique,
                Title        = task.Name,
                Type         = task.GetType().FullName
            };

            if (newJob.IsUnique)
            {
                var oldjob = DataService.PerThread.ScheduleJobSet.FirstOrDefault(x => x.Type == newJob.Type && (x.State == (byte)JobState.ReadyToStart || x.State == (byte)JobState.ReadyToRecover || x.State == (byte)JobState.Started));
                if (oldjob != null)
                {
                    if (oldjob.State == (byte)JobState.Started)
                    {
                    }
                    else
                    {
                        oldjob.RepeatPeriod = newJob.RepeatPeriod;
                        oldjob.DoRepeat     = newJob.DoRepeat;
                        oldjob.TryRecover   = newJob.TryRecover;
                        oldjob.Title        = newJob.Title;
                        DataService.PerThread.SaveChanges();
                    }

                    return(oldjob);
                }
            }

            SaveJobsToDb(newJob);
            return(newJob);
        }