我试图弄清楚C#中的Tasks是如何工作的。 我找到了这篇文章。
http://foreverframe.net/what-lies-beneath-asyncawait-in-c/
但是,我花了一些时间来寻找某些行的含义,但是什么也没找到。
例如。
private int <>s__4;
private int <>s__5;
private int <>s__6;
“ <>”符号是什么意思?有大量的反编译c#源代码示例,这些代码始终包含诸如“ <> d__0”之类的内容?
我在Google上搜索了IL操作码参考以及ILSpy教程,该教程可以解释这一点,但一无所获。我仍然很好奇对C#中的Task模式的完全理解。
预先感谢您提供此示例的帮助,或为我提供适当的文档/参考。
答案 0 :(得分:1)
<>
字符在C#中是非法的,但在IL中是合法的。
让我解释一下。
当编译器自动生成代码时,例如将yield return
的方法转换为状态机,或将async/await
的方法转换为类似方法时,编译器通常会构造一个类来承载此转换后的代码
曾经是局部变量的类也被重写为此类中的字段,以便承受通常从方法返回的状态转换。
您看到的字段是那些生成的字段。此处的名称是由编译器选择的,这种方式在IL中是合法的,但在C#中是非法的,这意味着在任何情况下,编译器都不会意外生成您也用于字段或标识符的名称。>
就这样,这是合法的字段(IL方面是合法字段,而C#方面是非法名称)。
除了名字,它们只是...字段。