使用 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();
    }
}
复制代码

代码解释

  1. 创建图片地址列表

    • 假设 imageUrls 包含100个图片地址。
  2. 设置并行选项

    • MaxDegreeOfParallelism = 5 表示每次并行处理5个任务。
  3. 使用 Partitioner.Create 创建分区

    • Partitioner.Create(imageUrls, true).GetPartitions(5) 创建5个分区,每个分区处理部分图片。
  4. 使用 Parallel.ForEach 并行处理分区

    • Parallel.ForEach 迭代分区,并为每个分区创建一个任务。
    • 在每个分区中,使用 partition.MoveNext() 迭代图片地址并处理。
  5. 处理图片的逻辑

    • ProcessImage 方法包含具体的图片处理逻辑,这里用 Task.Delay(500).Wait() 模拟处理时间。

这种方法确保了每次有最多5个图片在并行处理,而不会超过这个数量。

 

posted @   星辰与大海  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示