Loops 如何在dart中顺序执行异步函数

Loops 如何在dart中顺序执行异步函数,loops,asynchronous,dart,download,Loops,Asynchronous,Dart,Download,我使用dart:io的HttpClient下载文件,如下所示 总体思路: void下载(字符串url、字符串路径等)异步{ var len=await getFileSizeIfExists(路径); //从最后一个字节下载 ... 最终文件=文件(路径).openWrite(); ... request.close()。然后((响应)异步{ 等待响应。侦听((数据){ 文件。添加(数据); //显示进度条 }).onDone(()=>file.close()); }); ... } 现在我需

我使用
dart:io
HttpClient
下载文件,如下所示

总体思路:

void下载(字符串url、字符串路径等)异步{
var len=await getFileSizeIfExists(路径);
//从最后一个字节下载
...
最终文件=文件(路径).openWrite();
...
request.close()。然后((响应)异步{
等待响应。侦听((数据){
文件。添加(数据);
//显示进度条
}).onDone(()=>file.close());
});
...
}
现在我需要在for循环中使用这个下载函数

我以前使用过一个
forEach
,但现在将其更改为
Future.forEach
,如前所述。问题是序列化
下载
功能

。。。
URL=['…'];
未来进程(url)异步{
等待下载(url,…);
}
forEach(URL、进程);
...
但它们都同时启动并开始下载。这是非常糟糕的,我需要顺序下载

我只在需要访问它们时才使用async/wait,而不是在任何地方使用它们(我想)。 我认为等待应该是等待未来的完成

请告诉我,我可以做什么,下载一个接一个,而不是杀死服务器

完整的代码是为了防止我上面提供的不够

Resuming from the 294627 byte
Resuming from the 278243 byte
Resuming from the 81635 byte
Resuming from the 179939 byte
Resuming from the 196323 byte
Resuming from the 163555 byte
Resuming from the 229091 byte
Resuming from the 147171 byte
Resuming from the 311011 byte
Resuming from the 114403 byte
Resuming from the 130787 byte
Resuming from the 179939 byte
Current progress 175.72 KB/582.04 MB
0% [------------------------------------------------------------------------------------] 31.68 KB/581.87 MB ETA 131.6sCurrent progress 191.72 KB/466.23 MB
0% [-------------------------------------------------------------------------------------] 31.68 KB/466.05 MB ETA 30.1sCurrent progress 143.72 KB/577.72 MB
0% [-------------------------------------------------------------------------------------] 31.68 KB/577.58 MB ETA 93.3sCurrent progress 79.72 KB/488.32 MB
0% [-------------------------------------------------------------------------------------] 31.68 KB/488.24 MB ETA 15.8sCurrent progress 287.72 KB/514.25 MB
0% [-----------------------------------------------------------------------------------] 79.68 KB/581.87 MB ETA 6048.5sCurrent progress 271.72 KB/543.99 MB
0% [------------------------------------------------------------------------------------] 31.68 KB/543.73 MB ETA 193.3sCurrent progress 127.72 KB/514.95 MB
0% [------------------------------------------------------------------------------------] 31.68 KB/514.83 MB ETA 282.9sCurrent progress 223.72 KB/517.85 MB
0% [-------------------------------------------------------------------------------------] 31.68 KB/517.63 MB ETA 83.6sCurrent progress 111.72 KB/425.99 MB
0% [-----------------------------------------------------------------------------------] 79.68 KB/466.05 MB ETA 9191.8sCurrent progress 159.72 KB/474.10 MB
0% [------------------------------------------------------------------------------------] 31.68 KB/473.94 MB ETA 153.2sCurrent progress 175.72 KB/479.53 MB
0% [----------------------------------------------------------------------------------] 47.68 KB/577.58 MB ETA 20414.9sCurrent progress 303.72 KB/561.71 MB
0% [---------------------------------------------------------------------------------] 127.68 KB/577.58 MB ETA 22340.6s^C

我试过这个答案,但没用。你说没用。你能举个例子说明你是如何实现这个答案的吗?因为很明显,您的问题是您使用的是forEach()方法,而不是使用传统的“for(列表中的var元素)”。@julemand101我使用的是
wait response.listen((data){file.add(data);//如果(downloadSize>0)bar,则显示进度条。勾选(len:data.length);}
这就是问题所在。我注意到forEach并修复了它。这是主要问题。我不知道如何序列化它。我想我有点困惑。在你的问题中,你似乎指出多个下载同时运行是一个问题。但现在你要求一个解决方案来并行化代码?我已经尝试过了你说它不起作用。你能举个例子说明你是如何实现这个答案的吗?因为很明显,你的问题是你正在使用forEach()方法,而不是使用传统的'for(列表中的var元素)'来等待每个调用。@julemand101我使用的是
等待响应。listen((数据){file.add(数据);//如果(downloadSize>0)显示进度条。勾选(len:data.length);}
这就是问题所在。我注意到forEach并修复了它。这是主要问题。我不知道如何序列化它。我想我有点困惑。在你的问题中,你似乎指出多个下载同时运行是一个问题。但现在你要求一个并行化代码的解决方案?