public void RetrieveGroupMembers(GroupModel group) { if (group == null) { throw new ArgumentNullException("group"); } if (groupMapper.AreUsersLoaded(group)) { return; } group.Users.EnableSync(); Task.Factory.StartNew(() => { group.Users.Clear(); var users = repository.GetGroupMembers(group.Name); var userModels = users.Select(u => userMapper.GetModel(u, includeDummy: false)); var modelComparer = KeyComparer <UserModel> .OrderBy(m => m.FullName); foreach (UserModel model in userModels) { int index = group.Users.ToSublist().UpperBound(model, modelComparer); group.Users.Insert(index, model); } }).ContinueWith( t => onErrorOccurred(t.Exception), CancellationToken.None, TaskContinuationOptions.OnlyOnFaulted, TaskScheduler.FromCurrentSynchronizationContext() ); }