C# 为什么';此断点是否在此Parallel.ForEach()中被命中?
下面的方法包含一个Parallel.ForEach()。右侧带有“reference1”注释的代码行按预期查找“My_Group_X”(当代码行未注释时),并随后命中带有内联注释“reference2”的代码行。但是,如果我在没有标记为“reference1”的附加筛选行的情况下执行完整的FindAll(),则随后的代码行将标记为“reference2”没有被命中。这种行为似乎与逻辑相反,因为返回所有记录的open FindAll()肯定应该包括应用特定筛选器时找到的记录。知道这里可能存在什么问题或如何解决吗?我每次都会得到相同的测试结果:C# 为什么';此断点是否在此Parallel.ForEach()中被命中?,c#,.net,parallel-processing,async-await,parallel.foreach,C#,.net,Parallel Processing,Async Await,Parallel.foreach,下面的方法包含一个Parallel.ForEach()。右侧带有“reference1”注释的代码行按预期查找“My_Group_X”(当代码行未注释时),并随后命中带有内联注释“reference2”的代码行。但是,如果我在没有标记为“reference1”的附加筛选行的情况下执行完整的FindAll(),则随后的代码行将标记为“reference2”没有被命中。这种行为似乎与逻辑相反,因为返回所有记录的open FindAll()肯定应该包括应用特定筛选器时找到的记录。知道这里可能存在什么问
private async Task GetADGroupADUserMapFromAD(string domainName)
{
//get domain id
var domainId = domainLookup.Where(x => x.Name == domainName).First().Id;
using (var searchContext = new PrincipalContext(ContextType.Domain, domainName))
{
var ps = new PrincipalSearcher(new GroupPrincipal(searchContext));
Parallel.ForEach(
ps.FindAll()
//.Where(x => x.Name.ToUpper() == "MY_GROUP_X") //reference1
.Select(x => x.DistinguishedName),
new ParallelOptions() { MaxDegreeOfParallelism = Environment.ProcessorCount },
() => new PrincipalContext(ContextType.Domain, domainName),
(distinguishedName, loopState, threadLocalContext) =>
{
var threadLocalGroup = GroupPrincipal.FindByIdentity(
threadLocalContext, IdentityType.DistinguishedName, distinguishedName);
if (threadLocalGroup.Name.ToUpper() == "MY_GROUP_X")
{
var x = 0; //reference2
}
GetADGroupADUsersRecursive(domainId, threadLocalGroup);
return threadLocalContext;
},
threadLocalContext => threadLocalContext?.Dispose()
);
}
return;
}
你为什么不把你的动作转换成一个函数,在那里放一个断点,看看它是否命中。如果没有,那么可能源代码….未返回集合。此操作是否在并行范围外工作除了方法中的
async
修饰符外,这是否与async wait
有关?忽略了哪些其他警告?当我将代码更新为ps.FindAll().AsEnumerable()时,断点似乎正在被击中.你知道为什么吗?