i3a*_*non 11 .net c# debugging exception-handling async-await
当您在Visual Studio调试器中打开"抛出异常时断开"功能时,它会在选定的异常类型的任何位置中断.告诉它不要破解特定方法的方法是用DebuggerStepThrough属性(或DebuggerHidden)来装饰这些方法.
这,显然,没有一个工作async由于某种原因的方法.这是一个重现问题的片段.调试器将打破内TestAsync,即使它标明的属性,它会不会打破里面Test的除外(它们之间唯一的区别是第一个标有async关键字):
public class Attributes
{
public async Task Run()
{
await TestAsync();
await Test();
}
[DebuggerHidden]
[DebuggerStepThrough]
public async Task TestAsync()
{
try
{
throw new Exception("Async");
}
catch
{
}
await Task.Delay(100);
}
[DebuggerHidden]
[DebuggerStepThrough]
public Task Test()
{
try
{
throw new Exception("sync");
}
catch
{
}
return Task.Delay(100);
}
}
Run Code Online (Sandbox Code Playgroud)
那么,这种行为是有意的吗?这是一个错误吗?有解决方法吗?