Ejemplo n.º 1
0
        public void ExecuteTasks()
        {
            using (var connection = CreateConnection())
                using (var db = new DBDataContext(connection))
                {
                    var logMonitor = GetLogMonitor();

                    foreach (var typeName in db.SYS_TaskStates.Select(r => r.TypeName))
                    {
                        try
                        {
                            ExecuteTask(typeName, logMonitor);
                        }
                        catch (Exception e)
                        {
                            logMonitor.LogException(e);
                        }
                    }
                }
        }
Ejemplo n.º 2
0
        public void ExecuteTask(string taskTypeName, ILogMonitor logMonitor, int countInIteration = 100)
        {
            object lockRun;

            lock (LockRuns)
            {
                if (!LockRuns.ContainsKey(taskTypeName))
                {
                    LockRuns[taskTypeName] = new object();
                }
                lockRun = LockRuns[taskTypeName];
            }

            if (logMonitor == null)
            {
                logMonitor = GetLogMonitor();
            }

            var startTime = DateTime.Now;

            lock (lockRun)
            {
                var type = BuildManager.GetType(taskTypeName, true, true);
                using (var connection = CreateConnection())
                    using (var db = new DBDataContext(connection))
                    {
                        var task = (ITask)Activator.CreateInstance(type);
                        task.Initialize(SpecificInstances.DbFactory.CreateConnection(), 60, logMonitor);
                        var keyOfState = GetKeyOfState(taskTypeName, db);
                        var nextValue  = keyOfState;
                        do
                        {
                            keyOfState = nextValue;
                            nextValue  = task.Execute(keyOfState, countInIteration);
                            db.SYS_P_UpdateTaskStates(taskTypeName, nextValue, keyOfState);
                        }while (nextValue > keyOfState && startTime.AddMinutes(5) > DateTime.Now);
                    }
            }
        }
Ejemplo n.º 3
0
 private long GetKeyOfState(string typeName, DBDataContext db)
 {
     return(db.SYS_TaskStates.Where(r => r.TypeName == typeName).Select(r => r.KeyOfState).FirstOrDefault());
 }