Я пытаюсь найти практическое применение для System.Threading.CompressedStack
. Что-то классное, а не «О, мы можем переместить стек из одного потока в другой для удовольствия», а скорее, когда вы действительно захотите сделать это или что-нибудь еще, что вы можете сделать с этим интересным маленьким классом.Что такое прецедент для System.Threading.CompressedStack
ответ
Это действительно предназначено для внутреннего использования каркасом. От documentation:
Класс CompressedStack используется внутри класса SecurityContext. Например, метод SecurityContext.Capture захватывает сжатый стек для текущего стека вызовов, а также информацию о олицетворении и культуре. Класс SecurityContext в свою очередь используется классом ExecutionContext для потока контекста по потокам, например, при планировании задач пула потоков.
Этот класс не используется в обычных прикладных программах.
Ссылка работает снова. Итак, вопрос в том, почему Microsoft не отметила его внутреннюю? Я имею в виду, конечно, есть причина оставить его публичным. Любые мысли о том, что вы можете использовать для других, кроме вышеупомянутых? Просто любопытно. –
@JNZ: Внутренняя внутренняя часть для одной сборки. Я подозреваю, что MS использует это в нескольких сборках, и, вероятно, есть некоторые очень, очень странные случаи, когда это может быть полезно в противном случае ... –
Прямо из documentation:
"Этот класс не используется в обычном программировании приложений."
Я предполагаю, что это только для необычного программирования приложений.
Это чрезвычайно полезный класс при создании плагинов и песочниц. Можно захватить CAS-контекст хоста (CompressedStack.Capture), а затем, когда плагин вызывает метод доверенного хоста (CompressedStack.Run), можно «возобновить выполнение» в контексте выполнения хоста.
В противном случае метод «доверенного» хоста будет выполняться как ненадежный код и будет запускаться во множество SecurityExceptions при попытке доступа к ресурсам, защищенным CAS.
Не стек, контекст безопасности. Чтобы его можно было использовать и проверять, когда марширование вызова метода в другой поток. Ничего вы бы сделали сами. –