DebuggerNonUserCode不适用于async/await

dim*_*mio 6 c# attributes visual-studio async-await

所以,我有以下代码:

static void Main(string[] args)
{
    var test1 = GeneratedHelperSync();
    var test2 = GeneratedHelperAsync().Result;
}

[System.Diagnostics.DebuggerNonUserCode]
static int GeneratedHelperSync()
{
    return RealCode();
}

[System.Diagnostics.DebuggerNonUserCode]
async static Task<int> GeneratedHelperAsync()
{
    // F11 steps in here!
    return await Task.FromResult(RealCode());
}

private static int RealCode() 
{ 
     return 1; 
}
Run Code Online (Sandbox Code Playgroud)

我是F11(步入)通过Visual Studio 2013中的所有语句.我希望在Main()的两个调用中都可以将我引入"return 1"语句.但是,在第二种情况下,它将我带入异步功能.

似乎编译器在异步代码生成期间删除了我的DebuggerNonUserCode.
我的问题是,为什么这样做?我错过了什么吗?

至于为什么我想要这个,我有一些自动生成的辅助异步函数,我想避免一直踩到它们.

Chr*_*Fin 4

async这是/模式的一个常见“问题” await。这种情况发生在添加到async方法中的所有属性上(我也遇到过这种情况ExcludeFromCodeCoverageAttribute,并对其进行了一些研究)。

发生的情况是,编译器在 处拆分该方法,await并将“之后await”的所有内容放入一个新方法中,该方法在 'ed 任务完成时调用await。这个新方法没有从初始方法中获取属性 - 为什么我不知道。

我知道解决这个问题的唯一方法是ExcludeFromCodeCoverageAttribute在类级别设置属性。