Почему эта точка останова не попадает в этот Parallel.ForEach ()?

У меня есть метод ниже, который содержит Parallel.ForEach (). Строка кода с комментарием «reference1» справа находит «My_Group_X», как и ожидалось (когда строка кода раскомментирована), а затем попадает в строку кода со встроенным комментарием «reference2». Однако, если я выполняю полный FindAll () без дополнительной строки фильтрации, отмеченной «reference1», то последующая строка, отмеченная «reference2», не попадает. Такое поведение кажется противоречащим логике, поскольку открытый 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;
}

Почему бы вам не преобразовать свое действие в функцию, поставить там точку останова и посмотреть, попадет ли она. В противном случае возможно, что исходный ps.FindAll()....... не возвращает коллекцию.

user1672994 11.06.2018 07:21

работает ли это вне параллели для каждого

TheGeneral 11.06.2018 07:35

Помимо модификатора async в методе, имеет ли это какое-либо отношение к async-await? Какие еще предупреждения игнорируются?

Paulo Morgado 11.06.2018 09:57

похоже, что точка останова сейчас срабатывает, когда я обновляю код до ps.FindAll (). AsEnumerable (). любая идея, почему это?

user9393635 11.06.2018 17:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
113
0

Другие вопросы по теме