C#Parallel ForEach未处理的WorkItem用户代码字段信息Retriving

时间:2017-09-17 01:39:39

标签: c# tfs tfs-workitem workitem

目前我正在开发一个从TFS获取信息的项目 试图建立一个自定义工具

我决定提高该工具的性能,并且使用Parallel选项(.Net 4 +)遇到了1个问题

备注:我已尝试在查询结果和项目上放置安全线程,但它没有帮助代码示例位于底部

我正在尝试执行下一个代码:

    WorkItemCollection queryResults;
//Query run to populate the collection
                    Parallel.ForEach<WorkItem>(queryResults.Cast<WorkItem>(), item => {
                    Console.WriteLine(item.Fields.GetById(AttributeCode.Default.RemainingWork).Value);
        });

错误引用:

  

Microsoft.TeamFoundation.WorkItemTracking.Proxy.dll中出现“Microsoft.TeamFoundation.TeamFoundationServiceUnavailableException”类型的异常,但未在用户代码中处理

从Exception Catch记录:

  

mscorlib.dll中出现'System.InvalidOperationException'类型的第一次机会异常   System.InvalidOperationException:集合已被修改;枚举操作可能无法执行。      在System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource资源)      在System.Collections.Generic.Dictionary 2.KeyCollection.Enumerator.MoveNext() at Microsoft.TeamFoundation.WorkItemTracking.Client.PagingFieldReader.ProcessFields(Int32 row, IEnumerable 1 fieldIds,Dictionary 2 fields) at Microsoft.TeamFoundation.WorkItemTracking.Client.PagingFieldReader.ProcessRevision(Int32 row, Dictionary 2 rowMap,Dictionary 2 plainFields, Dictionary 2 textFields)      在Microsoft.TeamFoundation.WorkItemTracking.Client.PagingFieldReader.Read(Int32 row,Int32 [] fields)      在Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemCollection.QueryFieldValues(Int32 index,Int32 [] fields)      在Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.get_IsAccessDenied()      在Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.QueryFieldValue(Int32字段)      在Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemFieldData.GetFieldValue(Int32 id,Int32 revision)      在Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.CheckUpdateCachedData()      在Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.get_Type()      在Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.get_Fields()

对项目进行阻止保护,不确定我是否做得对:

WorkItemCollection queryResults;
    //Query run to populate the collection
        BlockingCollection<WorkItem> bc = new BlockingCollection<WorkItem>();
        WorkItem temp;
        Parallel.ForEach<WorkItem>(queryResults.Cast<WorkItem>(), item =>
        {
            bc.Add(item);
            if (bc.TryTake(out temp))
                Console.WriteLine(temp.Fields[CoreField.CreatedBy]);
        });

错误:

  

mscorlib.dll中出现'System.InvalidOperationException'类型的第一次机会异常   mscorlib.dll中发生了'System.InvalidOperationException'类型的第一次机会异常   System.InvalidOperationException:集合已被修改;枚举操作可能无法执行。      在System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource资源)      在System.Collections.Generic.Dictionary 2.KeyCollection.Enumerator.MoveNext() at Microsoft.TeamFoundation.WorkItemTracking.Client.PagingFieldReader.ProcessFields(Int32 row, IEnumerable 1 fieldIds,Dictionary 2 fields) at Microsoft.TeamFoundation.WorkItemTracking.Client.PagingFieldReader.ProcessRevision(Int32 row, Dictionary 2 rowMap,Dictionary 2 plainFields, Dictionary 2 textFields)      在Microsoft.TeamFoundation.WorkItemTracking.Client.PagingFieldReader.Read(Int32 row,Int32 [] fields)      在Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemCollection.QueryFieldValues(Int32 index,Int32 [] fields)      在Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.get_IsAccessDenied()      在Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.QueryFieldValue(Int32字段)      在Microsoft.TeamFoundation.S-QA Tasks.exe中出现类型'System.InvalidOperationException'的第一次机会异常   WorkItemTracking.Client.WorkItemFieldData.GetFieldValue(Int32 id,Int32 revision)      在Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.CheckUpdateCachedData()      在Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.get_Type()      在Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.get_Fields()   System.InvalidOperationException:集合已被修改;枚举操作可能无法执行。      在System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource资源)      在System.Collections.Generic.Dictionary 2.KeyCollection.Enumerator.MoveNext() at Microsoft.TeamFoundation.WorkItemTracking.Client.PagingFieldReader.ProcessFields(Int32 row, IEnumerable 1 fieldIds,Dictionary`2 fields)      在Microsoft.TeamFoundation.WorkItemTracking.Client.PagingFieldReader.ProcessRevision(Int32 row,D

0 个答案:

没有答案