public IEnumerable <TfsChangesetWrapper> QueryChangesets(IEnumerable <TfsWorkItemWrapper> workItems, ITrackProgress trackProgress, CancellationToken cancelled = default(CancellationToken)) { var results = new System.Collections.Concurrent.ConcurrentBag <TfsChangesetWrapper>(); Parallel.ForEach(workItems, (workItem, state) => { if (Repository.Instance.TfsConnectionInfo.Uri == null) { state.Stop(); return; } if (cancelled.IsCancellationRequested) { state.Stop(); return; } trackProgress.Increment(); foreach (var changeset in workItem.RelatedChangesets) { trackProgress.ProgressInfo = String.Format("Processing work item #{0} ({1} related changesets)", workItem.TfsWorkItem.Id, workItem.RelatedChangesetCount); results.Add(UpdateChangesetFromCache(new TfsChangesetWrapper(changeset))); } }); cancelled.ThrowIfCancellationRequested(); var resultList = results .GroupBy(item => item.TfsChangeset.Changeset.ChangesetId) .Select(item => item.First()); return(resultList.ToList().AsEnumerable()); }
public IEnumerable <TfsWorkItemWrapper> QueryWorkItems(IEnumerable <TfsChangesetWrapper> changesets, ITrackProgress trackProgress, CancellationToken cancelled = default(CancellationToken)) { var results = new System.Collections.Concurrent.ConcurrentBag <TfsWorkItemWrapper>(); Parallel.ForEach(changesets, (changeset, state) => { if (Repository.Instance.TfsConnectionInfo.Uri == null) { state.Stop(); return; } if (cancelled.IsCancellationRequested) { state.Stop(); return; } foreach (var workItem in changeset.TfsChangeset.RelatedWorkItems) { results.Add(UpdateWorkItemFromCache(new TfsWorkItemWrapper(workItem))); } trackProgress.Increment(); }); cancelled.ThrowIfCancellationRequested(); var resultList = results .GroupBy(item => item.TfsWorkItem.Id) .Select(item => item.First()); return(resultList.ToList().AsEnumerable()); }