【发布时间】:2021-09-27 21:01:43
【问题描述】:
我来自使用线程而不是 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?
【问题讨论】:
-
doSmth暂停执行,因为它调用了sleep,这会暂停隔离中的执行。await在您的示例中并不重要,因为您实际上并没有做任何异步操作。尝试用await Future.delayed(...)替换sleep,然后你会看到不同。此外,正如所写,await doSmth()原则上不起作用,因为doSmth不会返回Future。
标签: dart async-await