我有很多需要下载的文件,因此我尝试使用下面的新异步功能。
var streamTasks = urls.Select(async url => (await WebRequest.CreateHttp(url).GetResponseAsync()).GetResponseStream()).ToList();
var streams = await Task.WhenAll(streamTasks);
foreach (var stream in streams)
{
using (var fileStream = new FileStream("blabla", FileMode.Create))
{
await stream.CopyToAsync(fileStream);
}
}
我担心这段代码会导致内存使用量过大,因为如果有1000个包含2MB文件的文件,那么这段代码将会把1000 * 2MB流加载到内存中。
也许我漏掉了什么或者完全正确。如果没有遗漏,那么最好的方法是等待每个请求并消耗流?