Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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# 为什么';此断点是否在此Parallel.ForEach()中被命中?_C#_.net_Parallel Processing_Async Await_Parallel.foreach - Fatal编程技术网

C# 为什么';此断点是否在此Parallel.ForEach()中被命中?

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()肯定应该包括应用特定筛选器时找到的记录。知道这里可能存在什么问

下面的方法包含一个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()时,断点似乎正在被击中.你知道为什么吗?