我在 Dart 中有一個這樣的代碼:
Future<void> dataProcessAsync() async {
await Future.delayed(Duration(seconds: 2));
print("Process Completed!");
}
void main() {
print("Process 1");
print("Process 2");
dataProcessAsync();
print("Process 3");
print("Process 4");
}
一切正常且異步。結果如預期(流程 1 - 流程 2 - 流程 3 - 流程 4 - 流程已完成!)
但是當我寫這樣的代碼時:
Future<void> dataProcessAsync() async {
for(int i = 1; i <= 10000000000; i ){}
print("Process Completed!");
}
void main() {
print("Process 1");
print("Process 2");
dataProcessAsync();
print("Process 3");
print("Process 4");
}
它不能異步作業。它等待 dataProcessAsync() 很長時間然后繼續行程 3。(行程 1 - 行程 2 - 行程完成! - 行程 3 - 行程 4)
有人能告訴我發生了什么以及如何解決這個問題嗎?
uj5u.com熱心網友回復:
async方法同步運行,直到第一個await. 如果該方法從未到達await,它將運行完成并回傳Future同步填充的 。
這是設計使然,并在 Dart 網頁上進行了描述:
一個
async函式同步運行,直到第一個await關鍵字。這意味著在async函式體內,第一個await關鍵字之前的所有同步代碼都會立即執行。
https://dart.dev/codelabs/async-await#execution-flow-with-async-and-await
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/370354.html
上一篇:在Flutter中,有沒有一種方法可以從存盤的檔案中繪制不同的內容和動態串列?
下一篇:如何等待物件被異步編輯?
