1. 程式人生 > >C# async/await非同步變成深入理解

C# async/await非同步變成深入理解

非同步函式簡介

一般指 async 修飾符宣告得、可包含await表示式得方法或匿名函式。

 

宣告方式

非同步方法的宣告語法與其他方法完全一樣, 只是需要包含 async 關鍵字。async可以出現在返回值之前的任何位置, 如下示例:

        async public static void GetInfoAsync()
        {
           //...
        }

        public async static void GetInfoAsync()
        {
           //...
        }

        
public static async void GetInfoAsync() { //... }

非同步方法的返回型別

非同步函式的返回型別只能為: void、Task、Task<TResult>。

Task<TResult>: 代表一個返回值T型別的操作。

Task: 代表一個無返回值的操作。

void: 為了和傳統的事件處理程式相容而設計。

 

await(等待)

await等待的是什麼? 可以是一個非同步操作(Task)、亦或者是具備返回值的非同步操作(Task<TResult>)的值, 如下:

        public async static void GetInfoAsync()
        {
            await GetData(); // 等待非同步操作, 無返回值
            await GetData<int>(1); //等待非同步操作, 返回值 int
        }

        static Task GetData()
        {
            //...
            return null;
        }

        static Task<T> GetData<T>(int
a) { //... return null; }

注: await 最終操作的是一個值, 當然, 也可以是無值,  如上GetData() , 否則就是一個 Task<T>  如上:  GetData<T>()

await執行過程