如何使用并行foreach实现下载队列异步

How to implement download queue async with parallel foreach

我想尝试从至少 3 个并发下载的图像集合中下载,但是,一旦 3 个下载完成,就从列表中添加一个新的下载,或者必须等到添加一个新的下载,直到3个并发下载完成一个下载。我该如何实现类似的东西?

到目前为止我已经尝试过了,但它似乎无需等待从 3 个并发下载中的至少 1 个完成就可以全部下载。

List<string> listOfLink = new List<string>();

await Task.Run(() =>
        Parallel.ForEach(listOfLink, new ParallelOptions { MaxDegreeOfParallelism = 3 }, async (link, state, index) => 
        {
          //Download image httpclient
          //DownloadImageAsync(link);
        }));

我不完全确定你需要在这里使用 Paralell.ForEach,这个答案可以解释为什么比我在这里重写它更好:

但是,为了回答您的实际问题,我建议您这样做:

var listOfLink = new List<string>();
var downloadTasks = listOfLink.Select(link => DownloadImageAsync(link));
await Task.WhenAll(downloadTasks);