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

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)

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

Mat*_*ith 5

属性在async / await中不能很好地发挥作用,因为异步方法会在幕后重新编写-并且属性不会跟随。有关类似情况,请参见/sf/answers/1568881821/