如何在 Dart 中实现 async/await
How to implement async/await in Dart
我想我理解 async 背后的想法,返回一个 Future,但我不清楚 async 在一个非常基本水平。据我了解,它不会自动在程序中创建异步行为。例如:
import 'dart:async';
main() {
a();
b();
}
a() {
new Timer(new Duration(milliseconds: 20), () {}); // create latency
print("a");
}
b() {
print("b");
}
// a
// b
如果你把async放在a()之后,b()首先异步执行,a()在给定延迟后执行:
import 'dart:async';
main() {
a();
b();
}
a() **async** {
new Timer(new Duration(milliseconds: 20), () {}); // create latency
print("a");
}
b() {
print("b");
}
// b
// a
但是如果你把async放在a()和b()之后,a()先执行,类似于不使用async 全部:
import 'dart:async';
main() {
a();
b();
}
a() **async** {
new Timer(new Duration(milliseconds: 20), () {}); // create latency
print("a");
}
b() **async** {
print("b");
}
//a
//b
是否在所有功能上使用 async 完全取消 async 功能?
现在,我认为 main() async 本身并没有真正激活异步行为。如果在 main() 之后添加 async,则不会发生任何变化。但是,它允许您使用 await,以防您必须先等待 a() 函数完成,然后才能继续执行程序。这样对吗?
import 'dart:async';
main() **async** {
**await** a();
b();
}
a() **async** {
new Timer(new Duration(milliseconds: 20), () {}); // create latency
print("a");
}
b() {
print("b");
}
// waits for the value of a() if you put **await** keyword
// a
// b
但是,我经常看到 main() async {} 以及在脚本 html 标记之后使用它,但是没有 在任何地方等待。它在不同的上下文中意味着不同的东西吗?我希望我已经充分解释了逻辑。您能解释一下我对 async/await 的用法有何误解吗?谢谢。
a() {
new Timer(new Duration(milliseconds: 20), () {}); // create latency
print("a");
}
此代码不会将 print("a");
的执行延迟 20 毫秒。它只是延迟了 {}
的执行,该 {}
已排队等待稍后执行,然后立即继续执行 print("a");
您使用 async
/ await
的代码和不使用 async
/ await
的等效代码如下所示:
import 'dart:async';
main() async {
await a();
b();
await main2(); // call the example without async/await
}
Future a() async {
await new Future.delayed(const Duration(milliseconds: 20), () {}); // create latency
print("a");
}
void b() {
print("b");
}
Future main2() {
return a2().then((_) {
b();
});
}
// equivalent of a without async/await
Future a2() {
return new Future.delayed(const Duration(milliseconds: 20), () {}) // create latency
.then((_) => print("a"));
}
试穿DartPad
我想我理解 async 背后的想法,返回一个 Future,但我不清楚 async 在一个非常基本水平。据我了解,它不会自动在程序中创建异步行为。例如:
import 'dart:async';
main() {
a();
b();
}
a() {
new Timer(new Duration(milliseconds: 20), () {}); // create latency
print("a");
}
b() {
print("b");
}
// a
// b
如果你把async放在a()之后,b()首先异步执行,a()在给定延迟后执行:
import 'dart:async';
main() {
a();
b();
}
a() **async** {
new Timer(new Duration(milliseconds: 20), () {}); // create latency
print("a");
}
b() {
print("b");
}
// b
// a
但是如果你把async放在a()和b()之后,a()先执行,类似于不使用async 全部:
import 'dart:async';
main() {
a();
b();
}
a() **async** {
new Timer(new Duration(milliseconds: 20), () {}); // create latency
print("a");
}
b() **async** {
print("b");
}
//a
//b
是否在所有功能上使用 async 完全取消 async 功能?
现在,我认为 main() async 本身并没有真正激活异步行为。如果在 main() 之后添加 async,则不会发生任何变化。但是,它允许您使用 await,以防您必须先等待 a() 函数完成,然后才能继续执行程序。这样对吗?
import 'dart:async';
main() **async** {
**await** a();
b();
}
a() **async** {
new Timer(new Duration(milliseconds: 20), () {}); // create latency
print("a");
}
b() {
print("b");
}
// waits for the value of a() if you put **await** keyword
// a
// b
但是,我经常看到 main() async {} 以及在脚本 html 标记之后使用它,但是没有 在任何地方等待。它在不同的上下文中意味着不同的东西吗?我希望我已经充分解释了逻辑。您能解释一下我对 async/await 的用法有何误解吗?谢谢。
a() {
new Timer(new Duration(milliseconds: 20), () {}); // create latency
print("a");
}
此代码不会将 print("a");
的执行延迟 20 毫秒。它只是延迟了 {}
的执行,该 {}
已排队等待稍后执行,然后立即继续执行 print("a");
您使用 async
/ await
的代码和不使用 async
/ await
的等效代码如下所示:
import 'dart:async';
main() async {
await a();
b();
await main2(); // call the example without async/await
}
Future a() async {
await new Future.delayed(const Duration(milliseconds: 20), () {}); // create latency
print("a");
}
void b() {
print("b");
}
Future main2() {
return a2().then((_) {
b();
});
}
// equivalent of a without async/await
Future a2() {
return new Future.delayed(const Duration(milliseconds: 20), () {}) // create latency
.then((_) => print("a"));
}
试穿DartPad