C 非同步程式設計 Task await的理解

2022-06-13 08:27:09 字數 1104 閱讀 5514

async/await是c#5.0中推出的,先上用法:

static void main(string args)

static async taskgetstrlengthasync()

static taskgetstring()

);}

async用來修飾方法,表明這個方法是非同步的,宣告的方法的返回型別必須為:void,task或task。

await必須用來修飾task或task,而且只能出現在已經用async關鍵字修飾的非同步方法中。通常情況下,async/await成對出現才有意義,

看看執行結果:

可以看出來,main函式呼叫getstrlengthasync方法後,在await之前,都是同步執行的,直到遇到await關鍵字,main函式才返回繼續執行。

那麼是否是在遇到await關鍵字的時候程式自動開啟了乙個後台執行緒去執行getstring方法呢?

現在把getstring方法中的那行注釋加上,執行的結果是:

大家可以看到,在遇到await關鍵字後,沒有繼續執行getstrlengthasync方法後面的操作,也沒有馬上反回到main函式中,而是執行了getstring的第一行,以此可以判斷await這裡並沒有開啟新的執行緒去執行getstring方法,而是以同步的方式讓getstring方法執行,等到執行到getstring方法中的task.run()的時候才由task開啟了後台執行緒!

那麼await的作用是什麼呢?

可以從字面上理解,上面提到task.wait可以讓主線程等待後台執行緒執行完畢,await和wait類似,同樣是等待,等待task.run()開始的後台執行緒執行完畢,不同的是await不會阻塞主線程,只會讓getstrlengthasync方法暫停執行。

那麼await是怎麼做到的呢?有沒有開啟新執行緒去等待?

C 非同步程式設計

同步方法和非同步方法的區別 同步方法呼叫在程式繼續執行之前需要等待同步方法執行完畢返回結果 非同步方法則在被呼叫之後立即返回以便程式在被呼叫方法完成其任務的同時執行其它操作 非同步程式設計概覽 net framework 允許您非同步呼叫任何方法。定義與您需要呼叫的方法具有相同簽名的委託 公共語言執...

C 非同步程式設計

一 基礎知識 1 非同步程式設計 2 非同步方法 乙個程式呼叫某個方法,在處理完成前就返回該方法。同步和非同步主要用於修飾方法。當乙個方法被呼叫時,呼叫者需要等待該方法執行完畢並返回才能繼續執行,我們稱這個方法是同步方法 當乙個方法被呼叫時立即返回,並獲取乙個執行緒執行該方法內部的業務,呼叫者不用等...

C 非同步程式設計

定義要求 方法簽名包含 async 修飾符。按照約定,非同步方法的名稱以 async 字尾結尾。返回型別為下列型別之一 1.如果你的方法有運算元為 tresult 型別的返回語句,則為 task。2.如果你的方法沒有返回語句或具有沒有運算元的返回語句,則為 task。3.void 如果要編寫非同步事...