在C#中捕获StackOverflow异常的一般方法是什么?

Fly*_*179 4 c# stack-overflow exception-handling

如果我有一个我知道可能无限递归的方法,但我无法可靠地预测哪些条件/参数会导致它,那么在C#中执行此操作的好方法是什么:

try
{
  PotentiallyInfiniteRecursiveMethod();
}
catch (StackOverflowException)
{
  // Handle gracefully.
}
Run Code Online (Sandbox Code Playgroud)

显然在主线程中你不能这样做,但我已经被告知有几次使用线程或AppDomain可以做到这一点,但我从未见过一个有效的例子.有人知道这是如何可靠地完成的吗?

Arc*_*rus 11

你不能.来自MSDN

从.NET Framework 2.0版开始,try-catch块无法捕获StackOverflowException对象,默认情况下会终止相应的进程.因此,建议用户编写代码以检测并防止堆栈溢出.例如,如果您的应用程序依赖于递归,请使用计数器或状态条件来终止递归循环.请注意,承载公共语言运行时(CLR)的应用程序可以指定CLR卸载发生堆栈溢出异常的应用程序域,并让相应的进程继续.有关更多信息,请参阅ICLRPolicyManager接口和主机概述.