等待不宣功能异步

问题描述 投票:2回答:2

实际上,在飞镖,为了在函数体中使用await,一个需要声明的全功能async

import "dart:async";

void main()  async {
  var x = await funcTwo();
  print(x);  
}

funcTwo() async {
  return 42;
}

此代码不会无标记main()async工作

Error: Unexpected token 'await'. 

但是,医生说“的await表情评估e,然后暂停当前正在运行的功能,直到结果准备好,也就是说,等到将来完成”(Dart Language Asynchrony Support

所以,也许我错过的东西,但也没有必要强迫功能是异步的?什么是使异步申报义务的理由?

asynchronous dart language-design
2个回答
2
投票

async功能await被重写为其中.then(...)代替await代码。

所述改性剂async标记这样的功能为一个具有被重写并与await被支撑。

没有async你会写

void main() {
  return funcTwo().then((x) {
    print(x);  
  });
}

这是一个非常简单的例子,但重写可能相当复杂,当更多的异步功能用途,如try / catchawait for(...),...


0
投票

一个问题是,await最初并不是达特语言的一部分。为了保持与可能潜在地使用await作为标识符现有程序的向后兼容性,该语言的设计者增加了一个机制,以明确地选择加入到使用新的关键字await:通过添加(先前无效)构建体声明函数async

© www.soinside.com 2019 - 2024. All rights reserved.