基本上我听说某些条件下将引起的。净吹过去的最后块。有没有人知道那些条件吗?

有帮助吗?

解决方案

两种可能性:

最终区块不会被执行,当有一个 StackOverflowException 由于没有间堆即使执行任何更多的代码。它也不会叫的时候有一个 ExecutionEngineException, ,这可能引起呼叫的 Environment.FailFast().

其他提示

除非CLR爆炸并且因ExecutingEngineException而崩溃(我在.net 1.1天中看到了一些只有适当数量的COM Interop :) ..我认为最终应该总是执行。

你可能会遇到这样的情况:try块中的代码导致在输入try块之前抛出SecurityException(而是在调用contains方法时抛出异常(参见 http://msdn.microsoft.com/en-us/library/fk6t46tz(VS.71).aspx )),在这种情况下,你甚至都不会进入try块,因此finally块中的代码永远不会被调用。

其他可能性包括StackOverflowException和ExecutingEngineException。

最后后台线程上的块可能无法执行。但是,这取决于主前台线程的完成执行,它甚至在后台线程的完整执行之前终止后台线程操作。

class Program
{

    static void Main(string[] args)
    {
        Program prgm = new Program();
        Thread backgroundThread = new Thread(prgm.CheckBgThread);
        backgroundThread.IsBackground = true;
        backgroundThread.Start();
        Console.WriteLine("Closing the program....");
    }

    void CheckBgThread()
    {
        try
        {
            Console.WriteLine("Doing some work...");
            Thread.Sleep(500);
        }
        finally
        {
            Console.WriteLine("This should be always executed");
        }
    }
}

还有Application.Exit方法。

最后一个块之后的代码和外部作用域中的代码都不会先执行finally块而不执行finally块(finally块中的异常可能导致它过早退出,在这种情况下执行将从终结者到外部范围)。如果finally块之前的代码卡在无限循环或永不退出的方法中,或者执行上下文被完全销毁,则finally块将不会执行。

请注意,依赖于finally块是合适的,与“Finalize”不同。方法(或C#“析构函数”),不应该被依赖。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top