我被困在必须从urls列表下载多个文件的情况下。我发现Parallel.ForEach是一种解决方案,它确实比简单的预见更有效。但是这个解决方案是,不会等到所有下载完成后再等待。
List<string> list = new List<string>() {"url1","url2","url3",... };
public async void downloadSimpleFile(string fileUrl) {
//download file logic
}
await Task.Factory.StartNew(() => Parallel.ForEach(list,
new ParallelOptions { MaxDegreeOfParallelism = 10 }, downloadSimpleFile));我也是这么想的:
public async Task<bool> downloadSimpleFile(string fileUrl) {
//download file logic
return true;
}现在我如何在downloadSimpleFile中使用Parallel.ForEach,因为上面提到的代码不再起作用了?
发布于 2016-06-01 11:22:56
使用Task.WhenAll方法。以下代码应该有效:
public async Task<bool> downloadSimpleFile(string fileUrl)
{
//download file logic
return true;
}
public async Task ProcessList()
{
var list = new List<string> {"url1", "url2", "url3" };
var downloadFiles = list.Select(downloadSimpleFile).ToArray();
var result = await Task.WhenAll(downloadFiles);
}https://stackoverflow.com/questions/37566848
复制相似问题