等待Parallel.ForEach

时间:2016-06-01 11:04:19

标签: c# asynchronous foreach parallel-processing

我陷入了必须从网址列表中下载多个文件的情况。我发现Parallel.ForEach是一个解决方案,它确实比简单的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,因为上述代码不再有用了?

我正在Parallel thisthis阅读有关async-await的一些帖子,但我没有理解。任何想法都是贬值的。

1 个答案:

答案 0 :(得分:3)

使用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);
}