В.NET System.Threading.Thread.CurrentPrincipal не обновляется

Я упускаю что-то элементарное здесь при отладке кода.NET:

    public static void CreateServiceSessionStore()
    {
        ServiceSessionStore serviceSessionStore = new ServiceSessionStore();
        serviceSessionStore.SetIdentity(System.Threading.Thread.CurrentPrincipal.Identity);
        System.Threading.Thread.CurrentPrincipal = serviceSessionStore;
        // Here, CurrentPrincipal still isn't a serviceSessionStore!
    }

В этом коде все кажется веселым. Однако... когда я отлаживаюсь и просто перед последней строкой, я смотрю на System.Threading.Thread.CurrentPrincipal. Значением является объект WebSessionStore, чего я и ожидаю, и я думаю, что последняя строка должна изменить его на объект ServiceSessionStore. Но это не так. Я могу посмотреть на serviceSessionStore, и он содержит объект ServiceSessionStore, но после запуска строки CurrentPrincipal все еще содержит объект WebSessionStore. Ошибка не выдается.

Теперь, помимо того, что на самом деле делают эти объекты, кто-то может предложить идею о том, почему он отказывается обновлять CurrentPrincipal?

1 ответ

Решение

Это артефакт отладчика. Выражения отладки оцениваются в выделенном потоке отладчика. CurrentPrincipal - это свойство контекста выполнения потока. Также причиной может быть статическое свойство. Разные потоки будут иметь разные принципалы, поэтому принципал потока отладчика не одинаков.

У тебя нет настоящей проблемы.

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