Я недавно написал пост в блоге. Первая часть о том, когда поток может быть прерван, вторая - о том, как он на самом деле работает.
Я никогда не видел правильной (в данном случае полной) документации о том, как это на самом деле работает, поэтому я написал об этом.
Суть в том, что CLR будет использовать SetThreadContext (API-интерфейс win32), чтобы перехватить ваш текущий IP-адрес и переместить вас в специальную заглушку для настройки прерывания потока, если вы не ожидаете прерывания.
Проверьте пост здесь