public void PopulateQueue() { if (!_isLocked) { _isLocked = true; _shiftsService = Bootstrapper.GetKernel().Resolve <IShiftsService>(); _userProfileService = Bootstrapper.GetKernel().Resolve <IUserProfileService>(); var t1 = new Task(async() => { try { var shifts = await _shiftsService.GetShiftsStartingNextDayAsync(DateTime.UtcNow); foreach (var shift in shifts) { var qi = new ShiftNotifierQueueItem(); if (shift.Personnel != null && shift.Personnel.Any()) { qi.Profiles = await _userProfileService.GetSelectedUserProfilesAsync(shift.Personnel.Select(x => x.UserId).ToList()); } qi.Day = shift.GetShiftDayforDateTime(DateTime.UtcNow.AddDays(1)); if (qi.Day != null) { if (qi.Profiles == null) { qi.Profiles = new List <UserProfile>(); } qi.Signups = await _shiftsService.GetShiftSignpsForShiftDayAsync(qi.Day.ShiftDayId); if (qi.Signups != null && qi.Signups.Any()) { qi.Profiles.AddRange(await _userProfileService.GetSelectedUserProfilesAsync(qi.Signups.Select(x => x.UserId).ToList())); var users = new List <string>(); foreach (var signup in qi.Signups) { if (signup.Trade != null) { if (!String.IsNullOrWhiteSpace(signup.Trade.UserId)) { users.Add(signup.Trade.UserId); } else if (signup.Trade.TargetShiftSignup != null) { users.Add(signup.Trade.TargetShiftSignup.UserId); } } } if (users.Any()) { qi.Profiles.AddRange(await _userProfileService.GetSelectedUserProfilesAsync(users)); } } } qi.Shift = shift; _queue.Enqueue(qi); } } catch (Exception ex) { Logging.LogException(ex); } finally { _isLocked = false; _cleared = false; _shiftsService = null; _userProfileService = null; } }); t1.Start(); } }