在dart中等待关键字是如何工作的?
我有这样简单的未来
main() {
print('Start');
Future((){
print('From Future');
});
print('end');
}
// Output
// Start
// End
// From Future
这是我所期望的工作,因为dart内部将首先在main上执行同步代码,如果所有的同步代码都执行了,那么dart将运行事件循环,并将未来的代码放入事件队列。这就是为什么我的未来最后执行的原因。
所以如果我把await关键字放进我的future,输出将是同步的,即使我把一个繁重的计算放进future,它们仍然作为同步运行。
main() {
print('Start');
await Future((){
print('From Future');
});
print('end');
}
// Output
// Start
// From Future
// End
所以我的问题是await关键字在dart中是如何工作的?如果我使用它,这意味着一个仍然运行的同步代码?这将是无用的,对吗?
1条答案
按热度按时间b09cbbtk1#
简而言之,与使用
.then()
语句相比,Dart中的await
关键字是编写异步逻辑的一种更好的方式,因此,第二个方法将被执行,就像它被编写为:正如您所看到的,我们没有改变
main()
正在同步执行的事实,但它将在await
处立即返回Future
,其余代码将在稍后的某个时间点执行。在本例中,使用
await
看起来并没有节省很多,但是对于更复杂的代码,嵌套.then()
语句可能会成为噩梦。但是
await
确实给予我们一种代码正在同步执行的“错觉”,但实际上,当我们有一个await
时,我们允许其他事件执行。