我来自一种使用线程而不是async/await的语言,我对await的用途感到困惑。
每个人都说await关键字告诉程序等待async函数完成,但在下面的代码中,我没有在doSmth()调用之前使用await,它们仍然会暂停执行:
import 'dart:io';
Future<String> _loadFromDisc() async {
sleep(Duration(seconds: 1));
return 'idfromdisc';
}
Future<String> _fetchNetworkData(String id) async {
sleep(Duration(seconds: 1));
return 'somedata';
}
class ProcessedData {
ProcessedData(this._data);
String _data;
}
void doSmth() async {
print('doSmth started');
sleep(Duration(seconds: 1));
print('doSmth finished');
}
Future<ProcessedData> createData() async {
doSmth();
doSmth();
print('calling loadFromDisc');
final id = await _loadFromDisc();
print('calling fetchNetworkData');
final data = await _fetchNetworkData(id);
print('done');
return ProcessedData(data);
}
void main() {
createData();
}我的意思是,这是有道理的,如果所有的函数都是立即执行的,这会很奇怪,但是如果代码以同样的方式工作,为什么我们还需要await呢?
发布于 2021-07-20 18:33:30
想象一下,你有一个异步代码,它是什么异步的,如果它执行的代码太长,你可以转移到其他代码,这是为了防止冻结和低性能,你必须在这里从非常大的数据中获取数据,但如果你在没有等待的情况下这样做,这将是一个承诺,你将会有一个错误或不想要的结果,所以你必须等到它等待这个获取,然后继续,希望我已经说得很清楚了
https://stackoverflow.com/questions/68453352
复制相似问题