Почему поток не прерывается при засыпании в блоке finally

Я просматривал MSDN и не могу найти причину, по которой поток не может быть прерван во время сна в пределах блока finally. Я безуспешно пытался прервать работу.

Есть ли способ разбудить поток, когда он спит внутри блока finally?

Thread t = new Thread(ProcessSomething) {IsBackground = false};
t.Start();
Thread.Sleep(500);
t.Interrupt();
t.Join();

private static void ProcessSomething()
{
    try { Console.WriteLine("processing"); }
    finally
    {
        try
        {
            Thread.Sleep(Timeout.Infinite);
        }
        catch (ThreadInterruptedException ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

Удивительно, но MSDN утверждает, что поток МОЖЕТ быть прерван в блоке finally: http://msdn.microsoft .com / en-us / library / aa332364 (v = vs.71) .aspx «Существует вероятность прерывания потока во время выполнения блока finally, и в этом случае блок finally прерывается».

править Я считаю комментарий Ханса Пассанта лучшим ответом, поскольку он объясняет, почему поток иногда может и не может быть прерван / прерван в блоке finally. И тогда процесс останавливается. спасибо

9
задан Marek 15 August 2011 в 13:25
поделиться