簡體   English   中英

ILSpy生成的代碼

[英]ILSpy generated code

我試圖弄清楚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模式的完全理解。

在此先感謝您為本示例提供的幫助,或為我提供適當的文檔/參考。

<>字符在C#中是非法的,但在IL中是合法的。

讓我解釋。

當編譯器自動生成代碼時,例如當它使用yield return將方法轉換為狀態機或將async/await方法轉換為類似方法時,它通常會構造一個類來承載此轉換后的代碼。

過去曾經是局部變量的內容也被重寫為該類上的字段,以便承受通常從方法返回的狀態轉換。

您看到的字段是那些生成的字段。 此處的名稱是由編譯器以這種方式選擇的,即在IL中合法,但在C#中是非法的,這意味着在任何情況下編譯器都不會意外生成一個您也用於字段或標識符的名稱。

就是這樣,這些都是合法的字段(IL方面),但非法名稱(C#方面)。

除了名字,它們只是...字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM