Exemple #1
0
        public bool Execute()
        {
            //There is a chance that if something happens, server restarts, app pool recycles, crashes etc...that
            //a task that has a long time in between doesn't get run, this task
            //is a sort of 'sync' task and will start up any tasks that should have been run that have not.

            //get all enabled tasks
            var allEnabledTasks = _taskLogic.GetAllTasks(true).ToList();

            allEnabledTasks.ForEach((t) =>
            {
                var startTime = t.LastStart;

                var interval = t.Seconds;

                var nextRunTimeForTask = t.NextRunTime;

                var timeShouldRun = startTime.AddSeconds(interval);

                if (nextRunTimeForTask == null)
                {
                    //task hasn't been run yet, should it have?
                    if (DateTime.Now > timeShouldRun)
                    {
                        //yes it should
                        // _taskLogic.StartSingle(t.Id);
                        _taskLogic.ExecuteTaskOnce(t.Id);
                    }
                }
                else
                {
                    //next run time in db isn't null, is the next run time less than current time?
                    //this will catch tasks that were stopped abruptly, such as with an app pool recycle/crash etc..
                    if (nextRunTimeForTask < DateTime.Now)
                    {
                        _taskLogic.ExecuteTaskOnce(t.Id);
                        // _taskLogic.StartSingle(t.Id);
                    }
                }
            }
                                    );

            //success
            return(true);
        }