我正在试图弄清楚C#中的任务是如何在幕后工作的。我找到了这篇文章。
http://foreverframe.net/what-lies-beneath-asyncawait-in-c/
但是,我花了一些时间寻找某一行的含义,但没有找到任何东西。
例如。
private int <>s__4;
private int <>s__5;
private int <>s__6;“<>”符号是什么意思?有很多解压c#源代码的例子,它们总是包含像"<>d__0“这样的东西?
我在谷歌上搜索了IL操作码参考,以及ILSpy教程,它们可以解释这一点,但什么都没有。我仍然对完全理解C#中的任务模式感到好奇。
预先感谢您对此示例的帮助,或者向我提供适当的文档/参考资料。
发布于 2018-08-21 00:10:44
<>字符在C#中是非法的,但在IL中是合法的。
让我解释一下。
当编译器自动生成代码时,例如,当它将使用yield return的方法转换为状态机,或者将async/await方法转换为类似的方法时,它通常会构造一个类来承载这些转换后的代码。
以前的局部变量也被重写为该类上的字段,以便在状态转换中幸存下来,而状态转换通常是从方法返回的。
您看到的字段就是那些生成的字段。这里的名称是由编译器以这样的方式选择的,在IL中是合法的,但在C#中是非法的,这意味着在任何情况下编译器都不会意外地生成您也用于字段或标识符的名称。
就是这样,这些都是合法的字段,在IL方面,但在C#方面,是非法的名称。
除了名字,他们只是..。字段。
https://stackoverflow.com/questions/51934617
复制相似问题