ThreadAbortException是否仍然强制执行finally(try/catch)部分中的代码?

Xaq*_*ron 5 c# timer try-catch-finally threadabortexception

我有一个System.Timers.Timer定时器,它AutoReset被设置为false.我使用a try/finally来确保Start它的结束时callback的计时器(我使用计时器这种方式来防止重复callback执行).码:

// inside timer call back
try
{
    // Do something
}
finally
{
    timer.Start(); // Is this line always executed?
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如果执行线程是什么会发生什么Aborted?该finally部分是否仍然执行或者没有线程来运行该部分?

Chr*_*ter 6

官方消息......

当调用Abort方法来销毁线程时,公共语言运行库会抛出ThreadAbortException.ThreadAbortException是一个可以捕获的特殊异常,但它会在catch块的末尾自动再次引发.引发此异常时,运行时会在结束线程之前执行所有finally块.因为线程可以在finally块中执行无限制计算或调用Thread.ResetAbort来取消中止,所以无法保证线程将永远结束.如果要等到中止的线程结束,可以调用Thread.Join方法.Join是一个阻塞调用,在线程实际停止执行之前不会返回.

MSDN上阅读更多相关信息.


Gon*_*alo 4

是的,该行将始终被执行并且中止被阻止,直到子句中的代码finally完成。