我想我理解异步背后的想法,返回一个未来,但我不清楚异步在一个非常基本的层次上是如何运行的。据我理解,它不会自动在程序中创建异步行为。例如:
import 'dart:async';
main() {
a();
b();
}
a() {
new Timer(new Duration(milliseconds: 20), () {}); // create latency
print("a");
}
b() {
print("b");
}
// a
// b如果将异步放在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但是,如果将异步放在a()和b()之后,那么a()首先执行,类似于根本不使用异步:
import 'dart:async';
main() {
a();
b();
}
a() **async** {
new Timer(new Duration(milliseconds: 20), () {}); // create latency
print("a");
}
b() **async** {
print("b");
}
//a
//b是否在所有函数上使用异步,完全取消异步函数?
现在,我认为main()异步本身并不真正激活异步行为。如果在main()之后添加异步,则不会发生任何更改。但是,它允许您在继续程序之前使用wait,以防您必须先等待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()异步{} alot,以及在脚本html标记之后使用它,但是没有等待。在不同的背景下,这意味着不同的事情吗?我希望我已充分解释了逻辑。你能解释一下我是如何误解异步/等待的使用吗?谢谢。
发布于 2015-11-17 06:25:32
a() {
new Timer(new Duration(milliseconds: 20), () {}); // create latency
print("a");
}此代码不会将print("a");的执行延迟20 ms。它只是延迟了{}的执行,后者被排队等待以后的执行,然后立即使用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上试用
https://stackoverflow.com/questions/33748983
复制相似问题