在我升级到.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报告此问题,但同时尝试通过调整代码来解决此问题。