Я просматривал 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. И тогда процесс останавливается. спасибо