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 。