异步代码中堆栈中的d__Xa部分到底是什么?

时间:2015-04-24 07:38:36

标签: windows-runtime stack async-await

当我将这一行放在异常堆栈中时:

selected

什么是“d__14a”?它是否可以告诉我(没有符号)从方法的开头有一些偏移?

1 个答案:

答案 0 :(得分:3)

具有奇怪名称的堆栈跟踪告诉您在MoveNext()类型的<GetStudentKey>d__14a方法中抛出了异常。

当您使用异步并等待the compiler generates some code来实现状态机时。这个状态机涉及一个结构,在你的例子中,结构的名称是<GetStudentKey>d__14a。显然,这不是C#中结构的合法名称,即使它在IL中工作正常,但这正是编译器使用保证不与您自己创建的任何名称冲突的名称的原因。

您必须查看compiler source code以了解如何生成d__14a部分。很可能逻辑在GeneratedNames类的方法MakeMethodScopedSynthesizedName中,但算法的确切性质不应该很重要。

编译器将为auto属性,lambda表达式,匿名类型,迭代器块等创建类似的“无效”名称。