当您打开Visual Studio调试器中的"Break when an exception is thrown"功能时,它会在选定的异常类型的任何位置中断。告诉它不要破解特定方法的方法是decorate these methods with DebuggerStepThrough
attribute (or 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);
}
}
那么,这种行为是否打算?这是一个错误吗?有解决方法吗?
答案 0 :(得分:4)
属性不能很好地与async / await一起使用,因为异步方法会在封面下重写 - 并且属性不会跟随。有关类似情况,请参阅https://stackoverflow.com/a/22412597/495262。