DebuggerStepThrough,DebuggerHidden在async-await方法中不起作用

当您在Visual Studio调试器中打开“抛出exception时断开”function时,它会在选定的exception类型的任何位置中断。 告诉它不要在特定方法中断的方法是使用DebuggerStepThrough属性(或DebuggerHidden )来装饰这些方法 。

显然 ,由于某种原因,这对于async方法不起作用。 这是一个重现问题的片段。 调试器TestAsync内部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); } } 

那么,这种行为是有意的吗? 这是一个错误吗? 有解决方法吗?

属性与async / await不兼容,因为异步方法在封面下重写 – 并且属性不遵循。 有关类似情况,请参阅https://stackoverflow.com/a/22412597/495262 。