Beispiel #1
0
        public void RetrieveUserGroups(UserModel user)
        {
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }
            if (userMapper.AreGroupsLoaded(user))
            {
                return;
            }
            user.Groups.EnableSync();

            Task.Factory.StartNew(() =>
            {
                user.Groups.Clear();
                var groups        = repository.GetUserGroups(user.Name);
                var groupModels   = groups.Select(g => groupMapper.GetModel(g, includeDummy: false));
                var modelComparer = KeyComparer <GroupModel> .OrderBy(m => m.Name);
                foreach (GroupModel model in groupModels)
                {
                    int index = user.Groups.ToSublist().UpperBound(model, modelComparer);
                    user.Groups.Insert(index, model);
                }
            }).ContinueWith(
                t => onErrorOccurred(t.Exception),
                CancellationToken.None,
                TaskContinuationOptions.OnlyOnFaulted,
                TaskScheduler.FromCurrentSynchronizationContext()
                );
        }