【发布时间】:2019-03-02 12:06:28
【问题描述】:
我的以下 Dart 代码的行为与我预期的不同:
final File file = File("result.csv");
Future send(String message) async {
try {
await file.writeAsString(message + '\n',
mode: FileMode.append, flush: true);
} catch (e) {
print("Error: $e");
}
return await file.length();
}
main() async {
final futures = <Future>[];
for (int i = 0; i < 100; i++) {
futures.add(send("$i"));
}
for (int i = 0; i < 100; i++) {
print(await futures[i]);
}
}
我希望在第二个循环中对await futures[i] 的每次调用返回后立即写入文件。然而,这似乎并没有发生。
对于从 0 到 99 的每个索引,该文件应包含一行。但它包含一行 99,后跟一个空行。第二个循环中的打印调用总是打印相同的文件长度,3。
事件循环似乎以某种方式合并了调用,并且只实际执行了最后一个调用,尽管我仍然在第二个循环中等待了 100 个不同的未来。
为什么会发生这种情况,我怎样才能让期货运行而不立即等待它们(我真的只需要稍后等待,当所有对 send 的调用都已完成时)?
【问题讨论】:
标签: dart