如何使用并行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);
我想尝试从至少 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);