Как среда CLR вызывает исключение ThreadAbortException?

#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-адреса и перемещения вас в специальную заглушку для настройки прерывания потока, если ваш поток не находится в режиме ожидания прерывания.

Ознакомьтесь с сообщением здесь