Может ли ThreadAbortException окончательно пропустить?
Все я've read утверждает, что прерывание в потоке выполнит блок finally, прежде чем завершится из ThreadAbortException. Я хотел подтвердить это, чтобы я мог планировать, как обрабатывать какой-то сторонний код, который может зависать бесконечно. Однако следующий тест меня смутил:
public void runTest(DateTime deadline)
{
testThread = new Thread(() =>
{
try
{
Console.WriteLine("test thread started at " + DateTime.Now.ToShortTimeString());
while (true) { }
}
finally
{
Console.WriteLine("test thread entered FINALLY at " + DateTime.Now.ToShortTimeString());
while (true) { }
}
});
testThread.Start();
while (testThread.IsAlive && deadline.Subtract(DateTime.Now).TotalSeconds > 0)
{
Console.WriteLine("main thread while loop " + DateTime.Now.ToShortTimeString());
Thread.Sleep(10000);
}
if (testThread.IsAlive)
testThread.Abort();
Console.WriteLine("main thread after abort call " + DateTime.Now.ToShortTimeString());
}
Что я нахожу при запуске, так это то, что консоль никогда не упоминает вход в блок finally. Приложение продолжается после вызова .abort, как будто блока finally не существует вообще. Я делаю что-то неправильно? не должен»Передача управляющего блока в блок finally до достижения окончательной записи в консоль или порядок выполнения все еще зависит от того факта, что finally находится в отдельном потоке или что-то в этом роде?