public async Task SetUpWeaponsMapAsync() { await _weaponMapSetUpSemaphore.WaitAsync(); try { using var factory = _dbContextHelper.GetFactory(); var dbContext = factory.GetDbContext(); var nonWeaponItemCategoryIds = _itemCategoryService.GetNonWeaponItemCateogryIds(); var storeWeapons = await dbContext.Items .Where(i => i.ItemCategoryId.HasValue && !nonWeaponItemCategoryIds.Contains((int)i.ItemCategoryId)) .ToListAsync(); foreach (var weaponId in WeaponsMap.Keys) { if (!storeWeapons.Any(i => i.Id == weaponId)) { WeaponsMap.TryRemove(weaponId, out var removedItem); } } foreach (var weapon in storeWeapons) { if (WeaponsMap.ContainsKey(weapon.Id)) { WeaponsMap[weapon.Id] = weapon; } else { WeaponsMap.TryAdd(weapon.Id, weapon); } } } catch (Exception ex) { _logger.LogError($"Error setting up Weapons Map: {ex}"); } finally { _weaponMapSetUpSemaphore.Release(); } }