C 中,async關鍵字到底起什麼作用?

時間 2021-06-02 19:32:03

1樓:小墨

async 就把他當成乙個非同步的標誌就好啦。 就當做和void 一樣。

await 等待非同步

但也可以使用xx.result();獲取 await之後的結果。

2樓:pokemon

高階篇:以IL為劍,直指async/await - 布魯克石 - CSDN部落格

可以看看這個,async await 是語法糖,會編譯為狀態機

3樓:Tesla007

async 標記後可以使用await關鍵字,返回Task裡的T型別,表面上看來是這樣,實則有本質的分別,標記了async的方法會被編譯成狀態機,你可以用ILSPY看看,反編譯C#的版本調低一點你就可以看到亂7八糟的奇怪型別和方法了,沒有標記async的方法本質上還是原始的方法,返回的型別必須是Task或Task,標不標記async有著本質的分別

截圖看一下吧:

C#5以上

看看C#5以下

編譯出來是什麼個狀態機,跟普通的方法有著質的分別這個其實原理上跟IEnumerator yield本質是一樣的,都屬於編譯器魔法。

async await對CLR沒有任何意義

4樓:彭飛

async關鍵字不是必須的,只是用來幫助編譯器保持向後相容性。C#5 之前的程式沒有await關鍵字,而現在的await幾乎可以出現在如何表示式的位置。那就意味著如果沒有async這個環境,新編譯器遇到乙個老程式裡用了乙個使用者自定義的名字await,它就無法分辨這個乙個變數/類名還是關鍵字。

類似的例子還有「yield return」。

詳細請看https://

C 和 C 的 volatile 關鍵字為什麼給程式設計者造成了如此大的誤解?

望山 我看題主的誤解也不小。volatile關鍵字提出時候那個年代,記憶體發生CPU無法預知的意外變化的主要原因是這個位址對應的是外設暫存器,但並非只有這一種情況。多CPU或者多核心爭用記憶體,還有另外答主說的ISR裡面改了記憶體,也是屬於volatile需要發揮作用的情況。這個關鍵字就是用來阻止編...

C 中mutable關鍵字存在的必要性是什麼?

千月 const宣告是告訴使用者此操作不會改變物件狀態,類似於一種保證。當一些變數不屬於物件狀態時,我們應該也要允許它在const函式中發生改變。舉個簡單的例子,我想統計某個物件介面被呼叫的次數,使用者應該不想const函式被排除吧,mutable不就派上用場了。 YiQiuuu 我的理解是,乙個類...

php中 GLOBAL 和關鍵字global為什麼會受到靜態變數的影響

zjsxwc global a 時會新建乙個指向與外部 a同位址的指標 GLOBALS a static a 時會把外部 a 指標指向 static a的內容,拋棄原先的指向 多讀讀php手冊,非常多例子 PHP 變數範圍 PHP 引用的解釋 PHP 引用傳遞 PHP 引用做什麼 變數範圍 變數的範...