Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#并行ForEach未处理用户代码,用于工作项字段信息检索_C#_Tfs_Tfs Workitem_Workitem - Fatal编程技术网

C#并行ForEach未处理用户代码,用于工作项字段信息检索

C#并行ForEach未处理用户代码,用于工作项字段信息检索,c#,tfs,tfs-workitem,workitem,C#,Tfs,Tfs Workitem,Workitem,目前我正在进行一个项目,从TFS获取信息 正在尝试构建自定义工具 我已决定改进该工具的性能,但使用并行选项(.Net 4+)时遇到了一个问题 备注:我曾尝试将安全线程放在queryresults上,代码示例位于底部 我正在尝试执行下一个代码: WorkItemCollection queryResults; //Query run to populate the collection Parallel.ForEach<WorkItem>

目前我正在进行一个项目,从TFS获取信息 正在尝试构建自定义工具

我已决定改进该工具的性能,但使用并行选项(.Net 4+)时遇到了一个问题

备注:我曾尝试将安全线程放在queryresults上,代码示例位于底部

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

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

mscorlib.dll中发生类型为“System.InvalidOperationException”的第一次意外异常 mscorlib.dll中发生类型为“System.InvalidOperationException”的第一次意外异常 System.InvalidOperationException:集合已修改;枚举操作不能执行。 在System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource资源)处 在System.Collections.Generic.Dictionary
2.KeyCollection.Enumerator.MoveNext()中
位于Microsoft.TeamFoundation.WorkItemTracking.Client.PagingFieldReader.ProcessFields(Int32行,IEnumerable
1字段ID,Dictionary
2字段)
在Microsoft.TeamFoundation.WorkItemTracking.Client.PagingFieldReader.ProcessRevision(Int32行,Dictionary
2行映射,Dictionary
2普通字段,Dictionary
2文本字段) 位于Microsoft.TeamFoundation.WorkItemTracking.Client.PagingFieldReader.Read(Int32行,Int32[]字段) 位于Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemCollection.QueryFieldValue(Int32索引,Int32[]字段) 在Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.get_IsAccessDenied()中 位于Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.QueryFieldValue(Int32字段) 在Microsoft.TeamFoundation中,SW-QA Tasks.exe中发生了类型为“System.InvalidOperationException”的首次意外异常 WorkItemTracking.Client.WorkItemFieldData.GetFieldValue(Int32 id,Int32修订版) 在Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.CheckUpdateCachedata()中 在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()中
位于Microsoft.TeamFoundation.WorkItemTracking.Client.PagingFieldReader.ProcessFields(Int32行,IEnumerable
1字段ID,Dictionary`2字段) 在Microsoft.TeamFoundation.WorkItemTracking.Client.PagingFieldReader.ProcessRevision(Int32行,D


queryResults
是线程安全的集合吗?不是,它不是线程安全的集合。此处一定缺少某些内容。正如错误所述,正在修改集合。修改集合的代码在哪里?(FWIW,
Parallel.ForEach
可能与此问题无关——这是一个常见的问题,每当您在循环该集合的内容时修改集合时都会发生)。James我同意,但在使用仅打印项测试代码后,如果我尝试打印项.Fields,则每件事都很好[CoreField.CreatedDate]它失败您需要将queryResults复制到BlockingCollection或将queryResults实例化为BlockingCollection。queryResults是线程安全的集合吗?不是,它不是线程安全的集合这里一定缺少某些内容。正如错误所述,正在修改集合。修改集合的代码在哪里?(FWIW,
Parallel.ForEach
可能与此问题无关——这是一个常见的问题,每当您在循环该集合的内容时修改集合时都会发生)。James我同意,但在使用仅打印项测试代码后,如果我尝试打印项.Fields,则每件事都很好[CoreField.CreatedDate]失败您需要将queryResults复制到BlockingCollection或将queryResults实例化为BlockingCollection。
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]);
        });