说我有下面的代码:异步:如何在引发异常的确切代码行中断开?
async void buttonClick(object sender, RoutedEventArgs e)
{
await nested1();
}
async Task nested1()
{
await nested2();
}
async Task nested2()
{
await nested3();
}
async Task nested3()
{
await Task.Delay(1000);
throw new Exception("Die"); // <-- I want Visual Studio to break on this line
}
我怎样才能使Visual Studio的突破在指定的行只有在例外是未处理?
通常,当异常被抛出时,Visual Studio将打破在这里App.gics:
如果我然后启用调试器选项“仅我的代码”,它会而不是打破这里:
亲近。如果我再检查System.Exception
在例外窗口(按Ctrl + Alt + E)的“时抛出”栏下,它会破坏正是我想要的:
但现在Visual Studio将打破统统抛到例外,而不仅仅是未处理的。有没有什么办法可以使Visual Studio在只处理未处理的异常的最合理的代码行中断开,就像它在常规的非异步代码中一样?如果这种行为是不可能的,那么:
- 为什么不可能?
- 如何识别引发异常的代码行,无论是我自己的代码的
throw
语句,还是引发异常的框架方法调用?
我这里用3个嵌套函数在这个例子中强调的是,我的代码可能是复杂设有多家分支机构和嵌套方法调用,并确定有问题的代码行是困难的,如果Visual Studio中没有打破最内层的代码行。
相关 - http://stackoverflow.com/questions/18958950/how-can-i-make-vs-break-on-exceptions-in-an-async-task-without-breaking-on-all。 – 2014-10-07 08:24:24