C 非同步程式設計二

2021-09-07 07:09:37 字數 1823 閱讀 9094

上一非同步程式設計的部落格還是在9月份的,最近事情也比較多,煩惱事情乙個接著乙個,乙個人的週末除了無聊就剩無聊了,也只有寫寫部落格來打發下這無聊的時光。原本想著盡快把非同步程式設計這塊總結一下,之前把委託非同步算是總結了下,這次主要是想著把async await總結一下。在學習async await的同時順便也得把task了解一下,這裡只是大概的了解。因為想著在以後的多執行緒中在細細總結。

在總結之前,需要了解task下,task啟動的執行緒是後台執行緒,不過可以通過在main方法中呼叫task.wait()方法,使應用程式等待task執行完畢。task與thread的乙個重要區分點是:task底層是使用執行緒池的,而thread每次例項化都會建立乙個新的執行緒。

class

program

static

void

dorun2()

static

void main(string

args)

for (int i = 0; i < 50; i++));}

//讓應用程式不立即退出

console.read();}}

可以看到dorun1()方法每次的thread id都是不同的,而dorun2()方法的thread id是重複出現的。我們知道執行緒的建立和銷毀是乙個開銷比較大的操作,task.run()每次執行將不會立即建立乙個新執行緒,而是到clr執行緒池檢視是否有空閒的執行緒,有的話就取乙個執行緒處理這個請求,處理完請求後再把執行緒放回執行緒池,這個執行緒也不會立即撤銷,而是設定為空閒狀態,可供執行緒池再次排程,從而減少開銷。

task是task的泛型版本,這兩個之間的最大不同是task可以有乙個返回值。

static

void main(string

args)

);console.writeline(task.result);

console.writeline(

"主線程結束");

當在main方法中呼叫task.result的時候,將等待task執行完畢並得到返回值,這裡的效果跟呼叫task.wait()是一樣的,只是多了乙個返回值。

async用來修飾方法,表明這個方法是非同步的,宣告的方法的返回型別必須為:void或task或task。返回型別為task的非同步方法中無需使用return返回值,而返回型別為task的非同步方法中必須使用return返回乙個tresult的值,如上述demo中的非同步方法返回乙個string。await必須用來修飾task或task,而且只能出現在已經用async關鍵字修飾的非同步方法中。async/await必須成對出現才有意義,假如乙個方法宣告為async,但卻沒有使用await關鍵字,則這個方法在執行的時候就被當作同步方法。

C 非同步程式設計二

上一非同步程式設計的部落格還是在9月份的,最近事情也比較多,煩惱事情乙個接著乙個,乙個人的週末除了無聊就剩無聊了,也只有寫寫部落格來打發下這無聊的時光。原本想著盡快把非同步程式設計這塊總結一下,之前把委託非同步算是總結了下,這次主要是想著把async await總結一下。在學習async await...

C 非同步程式設計

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

C 非同步程式設計

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