在我升级到.NET 4(x64)之前,以下代码可以正常工作

namespace CrashME
{
    class Program
    {
        private static volatile bool testCrash = false;
        private static void Crash()
        {
            try
            {
            }
            finally
            {
                HttpRuntime.Cache.Insert("xxx", testCrash);
            }

        }

        static void Main(string[] args)
        {
            Crash();
            // Works on .NET 3.5 , crash on .NET 4
        }
    }
}

我只是发现一个运行时错误,还是我的用法有问题?

最佳答案

这似乎是CLR中的错误-您应将其报告给Microsoft。

请注意,StackOverflowException是在CLR尝试执行Crash时发生的,而不是在执行Crash方法的过程中发生-实际上,程序从不进入该方法。这似乎表明这是CLR中的一些底层故障。 (还请注意,抛出的异常也没有堆栈跟踪)。

此异常是特定于这种情况的-更改多种方法中的任何一种均可解决此问题,例如,以下代码可以正常工作:

private static void Crash()
{
    bool testCrash2 = testCrash;
    try { }
    finally
    {
        HttpRuntime.Cache.Insert("xxx", testCrash2);
    }
}

我建议您向Microsoft报告此问题,但同时尝试通过调整代码来解决此问题。

10-06 13:46