使用 Parallel.ForEach 结合 Partitioner.Create 来实现每次并行处理5张图片的逻辑。下面是一个示例代码,演示如何实现这种并行处理。
using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Threading.Tasks; class Program { static void Main() { List<string> imageUrls = new List<string>(); // 假设这个列表包含100个图片地址 for (int i = 0; i < 100; i++) { imageUrls.Add($"http://example.com/image{i}.jpg"); } // 设置并行选项 ParallelOptions parallelOptions = new ParallelOptions { MaxDegreeOfParallelism = 5 // 每次并行处理5张图片 }; // 使用 Partitioner.Create 分区器来创建分区 var partitions = Partitioner.Create(imageUrls, true).GetPartitions(5); // 使用 Parallel.ForEach 并行处理分区 Parallel.ForEach(partitions, parallelOptions, partition => { using (partition) { while (partition.MoveNext()) { string imageUrl = partition.Current; ProcessImage(imageUrl); } } }); Console.WriteLine("All images processed."); } static void ProcessImage(string imageUrl) { // 这里是处理图片的逻辑 Console.WriteLine($"Processing image: {imageUrl}"); // 假设处理图片需要一些时间 Task.Delay(500).Wait(); } }
代码解释
-
创建图片地址列表:
- 假设
imageUrls
包含100个图片地址。
- 假设
-
设置并行选项:
MaxDegreeOfParallelism = 5
表示每次并行处理5个任务。
-
使用
Partitioner.Create
创建分区:Partitioner.Create(imageUrls, true).GetPartitions(5)
创建5个分区,每个分区处理部分图片。
-
使用
Parallel.ForEach
并行处理分区:Parallel.ForEach
迭代分区,并为每个分区创建一个任务。- 在每个分区中,使用
partition.MoveNext()
迭代图片地址并处理。
-
处理图片的逻辑:
ProcessImage
方法包含具体的图片处理逻辑,这里用Task.Delay(500).Wait()
模拟处理时间。
这种方法确保了每次有最多5个图片在并行处理,而不会超过这个数量。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示