C 關鍵字async await用法

2022-10-06 05:54:13 字數 1484 閱讀 3006

經過一番的探索,終於搞清楚關鍵字async/await 在.net4.5之後可用的巧妙之處,在這裡記錄一下也與大家分享一下個人的心得體會

async:非同步執行

await:非同步執行中的等待其執行完(最大的優點是它是後台等待,因此不阻塞gui,介面互動非常的好)

使用async方法要定義async task或者async task 最好不要定義async void方法來呼叫,async void是處理程式等,總結結論就是要使用async task或者async task

使用asyn方法,可以用同步的格式,執行非同步的**,如下:

int a = 0;

private void button1_click(object sender, eventargs e)

);var eee=ce_async();//前面接收值,這樣方法立即返回,主線程繼續執行

textbox3.text = "主線程繼續向下執行";

}private async task ce_async()

});}

private delegate void settextdelegate(control cr,form f,string str);

private void settext(control cr, form f, string str)

else

}正如上圖第11行注釋,使用接收值來接收async方法,該方法會立即返回值,主程式繼續向下執行,該方法後台繼續跑。

那麼肯定有小夥伴與我當初有同樣的疑惑,這樣我執行用執行緒在這裡執行不也可以嗎?為什麼要用async關鍵字呢,他到底有什麼好處?

比如有一種情況:我的主線程如何有需要休眠等待的情況,那麼直接使用thread.sleep(),會使介面卡死,如果此時我將方法修改為async,那麼只需要await task.delay() 這樣也會等待時間完成後再向下執行,但是它不會使主介面處於假死狀態,如下:

private async void button1_click(object sender, eventargs e)

);var eee=ce_async();//前面接收值,這樣方法立即返回,主線程繼續執行

textwww.cppcns.combox3.text = "主線程繼續向下執行";

}再次重複一點,在async方法中使用接收值來接收task,會使得task不必加上await關鍵字而被迫使得主線程需要等待它執行完才能向下執行,接收值的目的就是立即得到返回值

使用接收值來接收task會直接xcdxyocc返回,**繼續向下執行,這一點很重要!!!

上圖的第3行,如下:

await task.delay(1000);

其中await只能用在非同步方法中,await會使得該執行緒等待await處的執行緒執行完,方可執行下方**,正如該處**所示,使用await task.delay(100); 代替 thread.sleep(1www.cppcns.com00)

本文標題: c#關鍵字async/await用法

本文位址:

new關鍵字 this關鍵字 base關鍵字

使用new,所做的三件事 1.類是引用物件,引用物件是在堆中開闢空間 在堆中開闢空間 2.在開闢的堆空間中建立物件 3.呼叫物件的構建函式 4.隱藏父類成員 子類的成員可以與隱藏從父類繼承的成員,類似於重寫。public new void sayhello this關鍵字的使用 1.代表當前類的物件...

C語言static關鍵字怎麼用

static關鍵字可以修飾 1.修飾區域性變數 靜態區域性變數 2.修飾全域性變數 靜態全域性變數 3.修飾函式 靜態函式1.修飾區域性變數 static修飾區域性變數改變了變數的生命週期,讓靜態區域性變數出了作用域依然存在,到程式結束,生命週期才結束。2.修飾全域性變數 乙個全域性變數被stati...

this關鍵字 static關鍵字

1.當成員變數和區域性變數重名,可以用關鍵字this來區分 this 代表物件,代表那個物件呢?當前物件 this就是所在函式所屬物件的引用 簡單說 那個物件呼叫了this所在的函式,this就代表哪個物件 this也可以用於在建構函式中呼叫其他建構函式 注意 只能定義在建構函式的第一行,因為初始化...