Dart語言中的async和await

2021-10-07 21:53:18 字數 964 閱讀 3717

async 和 await

開始說這兩個關鍵字之前我覺得有必要提一下:在dart中沒有子執行緒一說,所有**都是在一條主線上執行的,所以需要用非同步來實現一些耗時操作。(如果非要開啟多執行緒需要使用隔離,這裡不做敘述)

來說一下這兩個關鍵字吧,async用來修飾方法,需要寫在方法括號的後面,await寫在方法裡面,這裡要注意:await關鍵字必須在async函式內部使用,不然會報錯。await表示式可以使用多次。這裡其實很好理解:都不是非同步方法了你還等待啥啊?下面看乙個簡單的樣例吧:

void main() 

getname1() async

getstr1()

getstr2()

getname2()

getname3()

上面這段**並不長,大家可以猜一下列印出來的值。

首先執行getname1(),執行的時候發現這個方法是async的方法,繼續執行,執行到方法中第一行的時候,發現呼叫了乙個getstr1()方法,而且這個方法使用了await來修飾,表示需要等待執行

重點來了:當遇到await的時候會執行完這一行,列印出了getstr1,之後立即返回乙個future(void)物件(上面的**中省略了這個,寫**時推薦加上,方便**閱讀理解),然後將這個方法中剩餘的**放入了事件佇列,接著往下執行getname2()和getname3(),分別列印出了getname2和getname3

剛才也說過,在dart中只有乙個main執行緒一桶到底,還有乙個事件佇列,現在main執行緒中都已經執行完畢,但是事件佇列中還有東西,繼續執行getstr2(),執行的時候發現還是await,再進行等待,等待執行完成後列印getstr2,最後再列印getname1。

下面是列印出的結果:

getstr1

getname2

getname3

getstr2

getname1

Dart語言中的currying(柯里化)實現

dart語言是谷歌開發的一款程式語言,谷歌移動開發框架flutter就是使用該語言作為開發語言 dart支援函式式程式設計,函式式程式設計可以實現的功能之一是currying,柯里化 currying是啥呢?維基百科裡給出的概念 是一種把接受多個引數的函式變換成接受乙個單一引數 最初函式的第乙個引數...

Dart語言學習 二 Dart的常量和變數

dart是乙個強大的指令碼類語言,可以不預先定義變數型別 自動會型別推導 dart中定義變數可以通過var關鍵字可以通過型別來申明變數 var str this is dart var string str this is dart var int str 123 注意 var 後就不要寫型別,寫了...

c 語言中的 和

我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.當巨集引數是另乙個巨集的時候,需要注意的是凡巨集定義裡有用 或 的地方巨集引數是不會再展開。下面舉兩個例項 define print f,v printf the v is f v 加上 不會替換引數,只替換其所對應的字元 int ma...