Наконец, не прервется, если
Запуск этого кода в .NET 4.0.0-4.7.2 будет бесконечно блокировать при Thread.Abort()
печати foo
и в конечном итоге:
class Program
{
static void Main(string[] args)
{
var i = false;
var t = new Thread(() =>
{
try { Console.Write("foo"); } finally { while (true) { i=true; } }
});
t.Start();
Thread.Sleep(200);
t.Abort();
t.Join();
Console.WriteLine("bar = {0}", i);
Console.ReadKey();
}
}
Тем не менее, нет никаких гарантий, что это не будет выполняться иногда в следующих версиях.
Наконец, будет выполнено, но прервано, если
При запуске того же раздела в .NET 2.0-3.5 будет напечатано foobar = True
, что означает, что оно прервано.
Но если вы измените его следующим образом:
var t = new Thread(() =>
{
try { Console.Write("foo"); } finally { while (true) { Console.Write(".");} }
});
Он будет работать бесконечно, как в первом примере. Это ... странно.
Резюме
Лучше прямо спросить об этом в Microsoft.