var entrypoint = await findEntrypoint(); var exitCode = await runExecutable(entrypoint, args); await flushThenExit(exitCode);
在 await 表达式中, 表达式 的值通常是一个 Future 对象;如果不是,那么这个值会自动转为 Future。这个 Future 对象表明了表达式应该返回一个对象。await 表达式 的值就是返回的一个对象。在对象可用之前,await 表达式将会一直处于暂停状态。
如果 await 没有起作用,请确认它是一个异步方法。比如,在你的 main() 函数里面使用await,main() 的函数体必须被 async 标记:
main() async { checkVersion(); print('In main: version is ${await lookUpVersion()}'); }
结合 streams 使用异步循环
一个异步循环具有以下形式:
await for (variable declaration in expression) { // Executes each time the stream emits a value. }
表达式 的值必须有Stream 类型(流类型)。执行过程如下:
在 stream 发出一个值之前等待
执行 for 循环的主体,把变量设置为发出的值。
重复 1 和 2,直到 Stream 关闭
如果要停止监听 stream ,你可以使用 break 或者 return 语句,跳出循环并取消来自 stream 的订阅 。
如果一个异步 for 循环没有正常运行,请确认它是一个异步方法。 比如,在应用的 main() 方法中使用异步的 for 循环时,main() 的方法体必须被 async 标记。
main() async { ... await for (var request in requestServer) { handleRequest(request); } ... }