#clr #threadabortexception
#среда clr #исключение threadabortexception
Вопрос:
Если вы прерываете один управляемый поток из другого, используя Thread.Прервать, как среда CLR фактически генерирует исключение в другом потоке? Похоже на изящный трюк!
Ответ №1:
Я нашел несколько интересных ссылок на эту тему. Исключение ThreadAbortException — это особый случай, и среда CLR специально обрабатывает его.
http://mnikoo.net/2007/02/07/the-magic-of-the-clr-threadabortexception/
http://blogs.msdn.com/b/clrteam/archive/2009/04/28/threadabortexception.aspx
Ответ №2:
Некоторое время назад я написал об этом сообщение в блоге. Первая часть о том, когда поток может быть прерван, вторая о том, как это на самом деле работает.
Я никогда не видел никакой правильной (в данном случае полной) документации о том, как это на самом деле работает, поэтому я написал об этом.
Суть в том, что среда CLR будет использовать SetThreadContext (win32 api) для взлома вашего текущего IP-адреса и перемещения вас в специальную заглушку для настройки прерывания потока, если ваш поток не находится в режиме ожидания прерывания.