示例#1
0
        private static void JobIsDone(IAsyncResult asyncResult)
        {
            Tuple <Guid, Action, DateTime> args = asyncResult.AsyncState as Tuple <Guid, Action, DateTime>;

            ScheduleJob job          = DataService.PerThread.ScheduleJobSet.SingleOrDefault(x => x.Id == args.Item1);
            Action      executeTask  = args.Item2;
            DateTime    executedTime = args.Item3;
            DateTime    endTime      = DateTime.Now;

            ScheduleTaskState taskState = ScheduleTaskState.Success;
            Exception         exception = null;
            StringBuilder     info      = new StringBuilder();

            try
            {
                _log.Write("Начинается Асинхронное выполнение таска джобы " + job.Id);
                executeTask.EndInvoke(asyncResult);
            }
            catch (Exception e)
            {
                exception = e;
                _log.Write(e, "Выполнение джобы " + job.Id + " ПРЕРВАНО, возникла системная ОШИБКА");
                taskState = ScheduleTaskState.EpicFail;
            }
            finally
            {
                if (exception != null)
                {
                    info.AppendLine(exception.Message);
                    while (exception.InnerException != null)
                    {
                        exception = exception.InnerException;
                    }

                    _log.Write(exception, "Выполнение джобы " + job.Id + " завершено с ошибкой");
                    info.AppendLine("InnerException: " + exception.Message);
                    job.State = (byte)JobState.Error;
                }
                else
                {
                    _log.Write("Выполнение джобы " + job.Id + " завершено успешно");
                    if (job.DoRepeat && job.RepeatPeriod.HasValue)
                    {
                        job.State = (byte)JobState.ReadyToStart;
                        var d = DateTime.Now.AddSeconds(job.RepeatPeriod.Value);
                        job.NextExecutionDate = d;
                        _log.Write("Следующее выполнение джобы назначено на " + d);
                    }
                    else
                    {
                        job.State = (byte)JobState.Ended;
                    }
                }
                ReSaveJobToDb(job);

                Log(job, executedTime, endTime, info.ToString(), taskState);
            }
        }
示例#2
0
 private static void Log(ScheduleJob scheduleJob, DateTime startDate, DateTime endDate, string info, ScheduleTaskState state)
 {
     ScheduleExecutionInfo log = new ScheduleExecutionInfo()
     {
         StartDate = startDate,
         EndDate = endDate,
         ScheduleJobId = scheduleJob.Id,
         Info = info,
         State = (byte)state
     };
     DataService.PerThread.ScheduleExecutionInfoSet.AddObject(log);
     DataService.PerThread.SaveChanges();
 }
示例#3
0
        private static void Log(ScheduleJob scheduleJob, DateTime startDate, DateTime endDate, string info, ScheduleTaskState state)
        {
            ScheduleExecutionInfo log = new ScheduleExecutionInfo()
            {
                StartDate     = startDate,
                EndDate       = endDate,
                ScheduleJobId = scheduleJob.Id,
                Info          = info,
                State         = (byte)state
            };

            DataService.PerThread.ScheduleExecutionInfoSet.AddObject(log);
            DataService.PerThread.SaveChanges();
        }