对托管代码使用VS2010调试器是否可以触发终结器线程运行?
用例:
使用Tasks可能会在Task
对象的终结器上抛出异常(如果有任务)
自我抛出异常,而那些没有被照顾。
验证错误修正因为未处理可能非常耗时,因为您需要等待终结器线程启动才能确保修复正常工作。
我自己通常不使用终结器进行编码,因为它引起了很多麻烦,我也向微软邮寄了这个。但是它是这样的:如何触发终结器代码从调试器运行而不是代码。
答案 0 :(得分:2)
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
。