說說C 的async和await的具體用法

2022-09-26 03:57:13 字數 1363 閱讀 1979

c# 5.0中引入了async 和 await。這兩個關鍵字可以讓你更方便的寫出非同步**。

看個例子:

public class myclass

public task getvalueasync(double num1, double num2)

return num1;

});

} public async void displayvalue()

} 上面在myclass的建構函式裡呼叫了async關鍵字標記的非同步方法displayvalue(),displayvalue()方法裡執行了乙個await關鍵字標記的非同步任務getvalueasync(),這個非同步任務必須是以task或者task作為返回值的,而我們也看到,非同步任務執行完成時實際返回的型別是void或者tresult,displayvalue()方法裡await getvalueasync()之後的所有**都會在非同步任務完成時才會執行。

displayval程式設計客棧ue()方法實際執行的**如下:

public void displayvalue()

); }

可以看到,async和await關鍵字只是把上面的**變得更簡單易懂而已。

程式的輸出如下:

myclass() end.

value is : 2.47032822920623e-322

以下是我寫的乙個靜態類,可以方便將乙個普通function執行非同步呼叫:

public static class taskasynchelper

); };

await taskfunc();

if (callback != null)

callback();

} ///

/// 將乙個方法function非同步執行,在執行完畢時執行**callback

///

/// 非同步方法的返回型別

/// 非同步方法,該方法沒有引數,返回型別必須是tresult

/// 非同步方法執行完畢時執行的**方法,該方法引數為tresult,返回型別必須是void

public static async void runasync(func function, action callback)

); };

tresult rlt = await taskfunc();

if(callback != null)

callback(rlt);

} }

使用很簡單,將方法名作為引數傳進去就行了,最常用的是把很耗時的序列化函式傳進去,以免阻塞ui程序,造成卡頓現象,影響使用者體驗。

本文標題: 說說c#的async和await的具體用法

本文位址:

async和await的講解

普通的函式宣告 async function a 複製 宣告乙個函式表示式 let a async function 複製 async形式的箭頭函式 let a async 複製 async與await例項應用,基礎 控制器呼叫與server中查詢資料 exports.getbloglist asy...

async和await的使用

async其實是es7的才有的,是非同步操作的進化,其實就是封裝乙個promise的物件返回 async function test console.log test promiseasync方法在普通的函式前加上 async 關鍵字即可。執行這個函式,發現並沒有返回1111,而是通過promise...

async和await的講解

async和await的講解 宣告async函式的幾個方法 普通的函式宣告 async function a 宣告乙個函式表示式 let a async function async形式的箭頭函式 let a async 初識async和await async與await例項應用,基礎 控制器呼叫與...