Не гарантируется, что поток прервется немедленно или вообще прервется. Такая ситуация может возникнуть, если поток выполняет неограниченное количество вычислений в блоках finally, которые вызываются как часть процедуры прерывания, тем самым откладывая прерывание на неопределенное время. Чтобы дождаться прерывания потока, вы можете вызвать метод Join в потоке после вызова метода Abort, но нет гарантии, что ожидание закончится.
...
Если Abort вызывается для потока, который не был запущен, поток будет прерван при вызове Start. Если Abort вызывается для заблокированного или спящего потока, поток прерывается, а затем прерывается.
Если Abort вызывается для приостановленного потока, в потоке, вызвавшем Abort, создается исключение ThreadStateException, а AbortRequested добавляется к свойству ThreadState прерываемого потока. Исключение ThreadAbortException не создается в приостановленном потоке до тех пор, пока не будет вызвано Resume.
Если Abort вызывается в управляемом потоке во время выполнения неуправляемого кода, исключение ThreadAbortException не создается до тех пор, пока поток не вернется к управляемому коду.
Если два вызова Abort поступают одновременно, один вызов может установить информацию о состоянии, а другой вызов выполнить Abort. Однако приложение не может обнаружить эту ситуацию.
После вызова Abort в потоке состояние потока включает AbortRequested. После завершения потока в результате успешного вызова Abort его состояние изменяется на Stopped. При наличии достаточных разрешений поток, являющийся целью Abort, может отменить прерывание с помощью метода ResetAbort. Пример, демонстрирующий вызов метода ResetAbort, см. в классе ThreadAbortException.