public void PopulateQueue() { if (!_isLocked) { _isLocked = true; _departmentsService = Bootstrapper.GetKernel().Resolve <IDepartmentsService>(); _scheduledTasksService = Bootstrapper.GetKernel().Resolve <IScheduledTasksService>(); _usersService = Bootstrapper.GetKernel().Resolve <IUsersService>(); Task t1 = new Task(() => { try { var allItems = _scheduledTasksService.GetUpcomingScheduledTaks(); // Filter only the past items and ones that are 5 minutes 30 seconds in the future var items = from st in allItems let department = _departmentsService.GetDepartmentByUserId(st.UserId) let email = _usersService.GetMembershipByUserId(st.UserId).Email let runTime = st.WhenShouldJobBeRun(TimeConverterHelper.TimeConverter(DateTime.UtcNow, department)) where st.TaskType == (int)TaskTypes.ReportDelivery && runTime.HasValue && runTime.Value >= TimeConverterHelper.TimeConverter(DateTime.UtcNow, department) && runTime.Value <= TimeConverterHelper.TimeConverter(DateTime.UtcNow, department).AddMinutes(5).AddSeconds(30) select new { ScheduledTask = st, Department = department, Email = email }; foreach (var i in items) { var qi = new ReportDeliveryQueueItem(); qi.ScheduledTask = i.ScheduledTask; qi.Department = i.Department; qi.Email = i.Email; _queue.Enqueue(qi); } } catch (Exception ex) { Logging.LogException(ex); } finally { _isLocked = false; _cleared = false; _departmentsService = null; _scheduledTasksService = null; _usersService = null; } }); t1.Start(); } }
public void PopulateQueue() { Logging.LogTrace("StaffingJob: Entering PopulateQueue"); if (!_isLocked) { _isLocked = true; _departmentsService = Bootstrapper.GetKernel().Resolve <IDepartmentsService>(); _scheduledTasksService = Bootstrapper.GetKernel().Resolve <IScheduledTasksService>(); var t1 = new Task(() => { try { var allItems = _scheduledTasksService.GetUpcomingScheduledTaks(); Logging.LogTrace(string.Format("StaffingJob: Analyzing {0} schedule tasks", allItems.Count)); // Filter only the past items and ones that are 5 minutes 30 seconds in the future var items = from st in allItems let department = _departmentsService.GetDepartmentByUserId(st.UserId) let runTime = st.WhenShouldJobBeRun(TimeConverterHelper.TimeConverter(DateTime.UtcNow, department)) where (st.TaskType == (int)TaskTypes.DepartmentStaffingReset || st.TaskType == (int)TaskTypes.UserStaffingLevel) && runTime.HasValue && runTime.Value >= TimeConverterHelper.TimeConverter(DateTime.UtcNow, department) && runTime.Value <= TimeConverterHelper.TimeConverter(DateTime.UtcNow, department).AddMinutes(5).AddSeconds(30) select new { ScheduledTask = st, Department = department }; foreach (var i in items) { var qi = new StaffingScheduleQueueItem(); qi.ScheduledTask = i.ScheduledTask; qi.Department = i.Department; _queue.Enqueue(qi); } } catch (Exception ex) { Logging.LogException(ex); } finally { _isLocked = false; _cleared = false; _departmentsService = null; _scheduledTasksService = null; } }, TaskCreationOptions.LongRunning); t1.Start(); } }