private void ProcessSkillConfigurations(SkillConfigurationList skillConfigurationList)
 {
     lock (ProcessingLock)
         try
         {
             if (skillConfigurationList != null)
             {
                 var skills = skillConfigurationList.GetConfigurationList();
                 if (!_skills.Any() && skills.Any())
                 {
                     foreach (var skillConfiguration in skills)
                     {
                         CreateSkill(skillConfiguration.ConfigurationId.Id, skillConfiguration.ConfigurationId.DisplayName);
                     }
                     _skills = skills;
                     CheckForDeleted();
                 }
                 else if (SkillsChanged(skills))
                 {
                     foreach (var skillConfiguration in skills)
                     {
                         CreateSkill(skillConfiguration.ConfigurationId.Id, skillConfiguration.ConfigurationId.DisplayName);
                     }
                     _skills = skills;
                     CheckForDeleted();
                 }
             }
         }
         catch (Exception exception)
         {
             _logging.TraceException(exception, "SkillConfigurations Error");
         }
 }
        private void StartWatchingSkills()
        {
            try
            {
                if (_configurationManager != null && _configurationManager.Session != null && _configurationManager.Session.ConnectionState == ConnectionState.Up)
                {
                    _skillConfigurationList = new SkillConfigurationList(_configurationManager);
                    var querySettings = _skillConfigurationList.CreateQuerySettings();

                    querySettings.SetResultCountLimit(QueryResultLimit.Unlimited);

                    //var properties = new List<SkillConfiguration.Property>
                    //{
                    //    SkillConfiguration.Property.Id,
                    //    SkillConfiguration.Property.DisplayName,
                    //    SkillConfiguration.Property.UserAssignments,
                    //    SkillConfiguration.Property.WorkgroupAssignments
                    //};

                    //querySettings.SetPropertiesToRetrieve(properties);

                    using (var repository = Repository)
                    {
                        if (!repository.Skills.Any())
                        {
                            _skillConfigurationList.StartCaching(querySettings);
                            var skills = _skillConfigurationList.GetConfigurationList();
                            _skillConfigurationList.StopCaching();
                            if (skills.Any())
                            {
                                foreach (var skillConfiguration in skills)
                                {
                                    CreateSkill(skillConfiguration.ConfigurationId.Id, skillConfiguration.ConfigurationId.DisplayName);
                                }
                                _skills = skills;
                            }
                        }
                    }

                    _skillConfigurationList.ConfigurationObjectsRemoved += Skills_ConfigurationObjectsRemoved;

                    _skillConfigurationList.StartWatchingAsync(querySettings, Skills_StartOrRefreshWatchingCompleted, null);
                }
            }
            catch (Exception e)
            {
                _logging.TraceException(e, "SkillConfigurations Error");
            }
        }