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); } } } }
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); } } }
private long GetKeyOfState(string typeName, DBDataContext db) { return(db.SYS_TaskStates.Where(r => r.TypeName == typeName).Select(r => r.KeyOfState).FirstOrDefault()); }