【发布时间】:2020-05-10 13:10:10
【问题描述】:
我想尝试在至少 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);
}));
【问题讨论】:
-
Parallel类不是异步友好的。要限制并发异步 I/O 操作的数量,请查看 here。SemaphoreSlim可能是实现异步限制的最方便的工具。
标签: c# async-await concurrent-processing