2011-02-02 2 views
3

Я пытаюсь найти практическое применение для System.Threading.CompressedStack. Что-то классное, а не «О, мы можем переместить стек из одного потока в другой для удовольствия», а скорее, когда вы действительно захотите сделать это или что-нибудь еще, что вы можете сделать с этим интересным маленьким классом.Что такое прецедент для System.Threading.CompressedStack

+0

Не стек, контекст безопасности. Чтобы его можно было использовать и проверять, когда марширование вызова метода в другой поток. Ничего вы бы сделали сами. –

ответ

3

Это действительно предназначено для внутреннего использования каркасом. От documentation:

Класс CompressedStack используется внутри класса SecurityContext. Например, метод SecurityContext.Capture захватывает сжатый стек для текущего стека вызовов, а также информацию о олицетворении и культуре. Класс SecurityContext в свою очередь используется классом ExecutionContext для потока контекста по потокам, например, при планировании задач пула потоков.

Этот класс не используется в обычных прикладных программах.

+0

Ссылка работает снова. Итак, вопрос в том, почему Microsoft не отметила его внутреннюю? Я имею в виду, конечно, есть причина оставить его публичным. Любые мысли о том, что вы можете использовать для других, кроме вышеупомянутых? Просто любопытно. –

+0

@JNZ: Внутренняя внутренняя часть для одной сборки. Я подозреваю, что MS использует это в нескольких сборках, и, вероятно, есть некоторые очень, очень странные случаи, когда это может быть полезно в противном случае ... –

4

Прямо из documentation:

"Этот класс не используется в обычном программировании приложений."

Я предполагаю, что это только для необычного программирования приложений.

1

Это чрезвычайно полезный класс при создании плагинов и песочниц. Можно захватить CAS-контекст хоста (CompressedStack.Capture), а затем, когда плагин вызывает метод доверенного хоста (CompressedStack.Run), можно «возобновить выполнение» в контексте выполнения хоста.

В противном случае метод «доверенного» хоста будет выполняться как ненадежный код и будет запускаться во множество SecurityExceptions при попытке доступа к ресурсам, защищенным CAS.