dart 了解await关键字在事件循环中的作用

f0ofjuux  于 2023-03-15  发布在  其他
关注(0)|答案(1)|浏览(124)

在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中是如何工作的?如果我使用它,这意味着一个仍然运行的同步代码?这将是无用的,对吗?

b09cbbtk

b09cbbtk1#

简而言之,与使用.then()语句相比,Dart中的await关键字是编写异步逻辑的一种更好的方式,因此,第二个方法将被执行,就像它被编写为:

Future<void> main() {
  print('Start');

  return Future(() {
    print('From Future');
  }).then((_) {
    print('end');
  });
}

正如您所看到的,我们没有改变main()正在同步执行的事实,但它将在await处立即返回Future,其余代码将在稍后的某个时间点执行。
在本例中,使用await看起来并没有节省很多,但是对于更复杂的代码,嵌套.then()语句可能会成为噩梦。
但是await确实给予我们一种代码正在同步执行的“错觉”,但实际上,当我们有一个await时,我们允许其他事件执行。

相关问题