对托管代码使用 VS2010 调试器是否可以触发终结器线程运行?
用例:
如果任务本身已引发异常并且未处理这些异常,则使用任务可能会在对象的终结器上引发异常。Task
验证导致未处理的错误修复可能非常耗时,因为您需要等待终结器线程启动,然后才能确保修复正常工作。
我自己通常不使用终结器进行编码,因为它会引起很多头痛,而且我还向 Microsoft 发送了有关此问题的邮件。但是虽然它是这样的:如何触发终结器代码从调试器运行,而不是从代码运行。
对托管代码使用 VS2010 调试器是否可以触发终结器线程运行?
用例:
如果任务本身已引发异常并且未处理这些异常,则使用任务可能会在对象的终结器上引发异常。Task
验证导致未处理的错误修复可能非常耗时,因为您需要等待终结器线程启动,然后才能确保修复正常工作。
我自己通常不使用终结器进行编码,因为它会引起很多头痛,而且我还向 Microsoft 发送了有关此问题的邮件。但是虽然它是这样的:如何触发终结器代码从调试器运行,而不是从代码运行。
AFAIK 没有特殊的方法可以从调试器中执行此操作。
您可以在代码中触发它:
int i = 0, j = 1;
new Task(() => Console.WriteLine(j/i)).Start();
Thread.Sleep(1000); // make sure it has had plenty of time
//GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
//GC.WaitForPendingFinalizers();
Console.WriteLine("Did I explode yet?");
Console.ReadKey();
现在取消注释这两行以查看异常出现。
请注意,这只应用于测试等场景;您不应该在常规代码中真正使用GC
。