async 和 await 之非同步程式設計的學習

2022-01-25 20:45:12 字數 2263 閱讀 3154

async修改乙個方法,表示其為非同步方法。而await表示等待乙個非同步任務的執行。js方面,在es7中開始得以支援;而.net在c#5.0開始支援。本文章將分別簡單介紹他們在js和.net中的基本用法。

js中的非同步,還是基於promise實現的。沒有promise就辦法談非同步了。並且await只能出現async修改的方法中;以及reject會觸發catch(異常)。

class asynctest

//await and promise.all difference

async rundiff()

realize

runall());

let fn = async ()=>

}fn.call(

this

); }

premosfn());

let r =await promise.all(promises);

console.log(r.join(','));

}prefn();

}reject(),2000);

});}

let asyncreject = async function

()catch

( e)

}asyncreject();

}output(log, time), time);

});}

}

方法說明如下:

c#中異常是通過task來實現的,所以標記了async的方法,其方法體中都可以出現await,否則不可以。以及task中丟擲的異常,如果沒有同步等待,則不能獲取異常

public

class

asyncdemo

); }

public

async

system.threading.tasks.task run()

public

async

system.threading.tasks.task rundiff()

public

async

system.threading.tasks.task runall()

;foreach(var item in

array)

}public

async

system.threading.tasks.task promisefn()

;list

string>> tasks = new liststring>>();

foreach (var item in

array)

//waitall返回值不能獲取,他返回為void,而whenall則返回為乙個task(這個task就有其列表值)

string r = await

system.threading.tasks.task.whenall(tasks.toarray());

system.console.writeline(

string.join(","

,r));

}public

async

system.threading.tasks.task reject()

;await

func();

}}

呼叫**如下:

asyncdemo asyncdemo = new

asyncdemo();

asyncdemo.run().wait();

asyncdemo.rundiff().wait();

asyncdemo.runall().wait();

asyncdemo.promisefn().wait();

trycatch

(exception e)

上述**就是js的async和await在c#中的翻版實現。 其中每個非同步方法的呼叫,都用到了wait方法來進行同步等待。以獲取到結果。而沒有像js中那麼難以控制。尤其注意,async方法中異常的捕獲。

system.console.writeline("

b:" +(datetime.now.tolongtimestring()));

string array = new

string[3] ;

var r = await

this.output(array.first(), 2).continuewith((tsc) =>);

system.console.writeline(r.result);

Async和Await 非同步方法

async和await關鍵字是c 非同步程式設計的核心。通過使用這兩個關鍵字,你可以使用.net framework或windows runtime的資源建立乙個非同步方法如同你建立乙個同步的方法一樣容易。通過使用async和await定義的非同步方法,這裡被稱為非同步方法。非同步方法的特點 方法中...

非同步和等待 async和await

在.net 4.5中,通過async和await兩個關鍵字,引入了一種新的基於任務的非同步程式設計模型 tap 在這種方式下,可以通過類似同步方式編寫非同步 極大簡化了非同步程式設計模型。如下式乙個簡單的例項 static async void downloadstringasync2 uri ur...

vue中非同步函式async和await

一,非同步函式async 1.1,async作為乙個關鍵字放到函式前面,用於表示函式是乙個非同步函式,因為async就是非同步的意思,非同步函式也就意味著該函式的執行不會阻塞後面 的執行。寫乙個async 函式。就是在函式前面加上async 關鍵字,來表示它是非同步的,那怎麼呼叫呢?async 函式...