public void RetrieveGroupProperties(GroupModel group) { if (group == null) { throw new ArgumentNullException("group"); } group.Properties.EnableSync(); Task.Factory.StartNew(() => { group.Properties.Clear(); var properties = repository.GetGroupProperties(group.Name); var models = properties.Select(p => propertyMapper.GetModel(p)); var modelComparer = KeyComparer <PropertyModel> .OrderBy(p => p.Name); foreach (PropertyModel model in models) { int index = group.Properties.ToSublist().UpperBound(model, modelComparer); group.Properties.Insert(index, model); } }).ContinueWith( t => onErrorOccurred(t.Exception), CancellationToken.None, TaskContinuationOptions.OnlyOnFaulted, TaskScheduler.FromCurrentSynchronizationContext() ); }