很多朋友對于await和async和await用法搭配不太懂,今天就由小編來為大家分享,希望可以幫助到大家,下面一起來看看吧!
如何正確理解.NET 4.5和C#5.0中的async/await異步編程模式
安裝microsoft.bcl.async即可
該包由三個庫組成:microsoft.bcl、microsoft.bcl.async和microsoft.bcl.build。
await async和task.run的區(qū)別
async是一個修飾符,async定義的函數(shù)會默認的返回一個Promise對象resolve的值,因此對async函數(shù)可以直接進行then操作,返回的值即為then方法的傳入函數(shù)。
await也是一個修飾符,
await關鍵字只能放在async函數(shù)內(nèi)部,await關鍵字的作用就是獲取Promise中返回的內(nèi)容,獲取的是Promise函數(shù)中resolve或者reject的值
//如果await后面并不是一個Promise的返回值,則會按照同步程序返回值處理。
task.run
1)Task本身就是異步執(zhí)行的(4.5的那個類)。
2)控制數(shù)量和終止線程問題可以考慮這個模式:
async await 原理
當調(diào)用一個async函數(shù)時,會返回一個Promise對象(關鍵)
async函數(shù)中可能會有await表達式,await表達式會使async函數(shù)暫停執(zhí)行,直到表達式中的Promise解析完成后繼續(xù)執(zhí)行async中await后面的代碼并返回解決結果。
既然返回的是Promise對象,所以在最外層不能直接獲取其返回值,那么肯定可以用原來的方式:then()鏈來處理這個Promise對象
原理:
async/await函數(shù)其實就是一種語法糖
async/await是基于promise實現(xiàn)的,async函數(shù)其實就是把promise做了一個包裝
await返回值是一個Promise對象,它只是把await后面的代碼放到了Promise.then()
關于本次await和async和await用法搭配的問題分享到這里就結束了,如果解決了您的問題,我們非常高興。