异步
Dart中的异步看起来像是同步
dart中使用 async
方法和await
表达式实现异步
要使用await
,其方法必须带有async
关键字
可以使用try
,catch
, 和 finally
来处理使用 await
的异常
async
方法使用async
关键字,则该方法返回一个Future
,并且 认为该函数是一个耗时的操作。
虽然异步方法的执行可能需要一定时间,但是 异步方法立刻返回 - 在方法体还没执行之前就返回了
await
在一个异步方法内可以使用多次await
表达式
在 await expression
中, expression
的返回值通常是一个 Future
; 如果返回的值不是 Future
,则 Dart 会自动把该值放到 Future
中返回。 Future
对象代表返回一个对象的承诺(promise
)。await expression
执行的结果为这个返回的对象。 await expression
会阻塞住,直到需要的对象返回为止
如果await
无法正常使用,请确保是在一个 async
方法中。 例如要在 main()
方法中使用 await
, 则 main()
方法的函数体必须标记为 async
main() async {
print('In main: version is ${await lookUpVersion()}');
}
异步 for 循环具有如下的形式:
main() async {
...
await for (var request in requestServer) {
handleRequest(request);
}
...
}
如果异步 for
循环不能正常工作, 确保是在一个 async
方法中使用。 例如,要想在 main()
方法中使用异步 for
循环,则需要把 main()
方法的函数体标记为 async
- await-for
await for (int i in naturals) { print(‘event loop $i’); }
生成器
-
同步生成器
-
异步生成器
网友评论