gpt4 book ai didi

dart - 如何在Dart中实现异步/等待

转载 作者:行者123 更新时间:2023-12-03 03:27:16 29 4
gpt4 key购买 nike

我想我理解异步背后的想法,返回一个Future,但是我不清楚异步在一个非常基本的层面上如何表现。据我了解,它不会自动在程序中创建异步行为。例如:

import 'dart:async';
main() {
a();
b();
}
a() {
new Timer(new Duration(milliseconds: 20), () {}); // create latency
print("a");
}
b() {
print("b");
}
// a
// b

如果将a()放在async之后,则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()之后都放置了async,则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

在所有功能上使用异步功能会完全取消异步功能吗?

现在,我认为main()异步实际上并未自行激活异步行为。如果在main()之后添加异步,则没有任何变化。但是,它允许您使用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脚本标记之后都使用过它,但是没有等待的地方。在不同的环境中意味着不同的事情吗?我希望我已经充分解释了逻辑。您能解释我对使用异步/等待的误解吗?谢谢。

最佳答案

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

关于dart - 如何在Dart中实现异步/等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33748983/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com