DebuggerNonUserCode不能与async/await一起工作
本文关键字:await 一起 工作 async 不能 DebuggerNonUserCode | 更新日期: 2023-09-27 18:01:39
所以,我有以下代码:
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;
}
And I F11 (step-into)通过Visual Studio 2013中的所有语句。我希望在Main()的两个调用中都将我步进"return 1"语句。然而,在第二种情况下,它将我带入async函数。
似乎编译器在异步代码生成期间擦除了我的DebuggerNonUserCode。
我的问题是,为什么这样做?我错过什么了吗?
至于我为什么要这样做,我有一些自动生成的helper异步函数,我想避免一直进入它们。
这是async
/await
模式的一个常见"问题"。这发生在添加到async
方法的所有属性上(我在ExcludeFromCodeCoverageAttribute
中发生过这种情况,并对此进行了一些研究)。
发生的是,编译器在await
处拆分方法,并将"await
之后"的所有内容放入一个新方法中,该方法在await
'ed任务完成时被调用。这个新方法没有从初始方法中获得属性——我不知道为什么。
我所知道的ExcludeFromCodeCoverageAttribute
的唯一方法是在类级别设置属性。