天下之事,必先处之难,而后易之。

C# Parallel并行遍历方法和执行任务

Parallel遍历分为For、ForEach,支持Lamda表达式,执行并行任务使用Invoke。

控制台示例程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace MyParallel
{
    /// <summary>
    ///  Parallel.For()和Paraller.ForEach()方法在每次迭代中调用相同的代码,而Parallel.Invoke()方法允许同时调用不同的方法。Parallel.ForEach()用于数据并行性,Parallel.Invoke()用于任务并行性;
    /// </summary>
    class Program
    {
        /// <summary>
        /// 并行运行方法-Parallel.For-遍历顺序不定
        /// </summary>
        /// <param name="args"></param>
        static void Main0(string[] args)
        {

            ParallelLoopResult result = Parallel.For(0, 10, i =>
            {
                Console.WriteLine("迭代次数:{0},任务ID:{1},线程ID:{2}", i, Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
                Thread.Sleep(10);
            });

            Console.WriteLine("是否完成:{0}", result.IsCompleted);
            Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);

            Console.Read();
        }

        /// <summary>
        /// 并行运行方法-Parallel.For-遍历顺序不定
        /// </summary>
        /// <param name="args"></param>
        static void Main1(string[] args)
        {

            ParallelLoopResult result = Parallel.For(0, 10, (i, state) =>
            {
                Console.WriteLine("迭代次数:{0},任务ID:{1},线程ID:{2}", i, Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
                Thread.Sleep(10);
                if (i > 5)
                    state.Break();
            });

            Console.WriteLine("是否完成:{0}", result.IsCompleted);
            Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);

            Console.Read();
        }

        /// <summary>
        /// 并行运行方法-Parallel.ForEach-遍历顺序不定
        /// </summary>
        /// <param name="args"></param>
        static void Main2(string[] args)
        {

            string[] data = { "str1", "str2", "str3" };
            ParallelLoopResult result = Parallel.ForEach<string>(data, str =>
            {
                Console.WriteLine(str);
            });
            Console.WriteLine("是否完成:{0}", result.IsCompleted);
            Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);

            Console.Read();
        }

        /// <summary>
        /// 并行运行方法-Parallel.ForEach-遍历顺序不定
        /// </summary>
        /// <param name="args"></param>
        static void Main3(string[] args)
        {
            string[] data = { "str1", "str2", "str3", "str4", "str5" };
            ParallelLoopResult result = Parallel.ForEach<string>(data, (str, state, i) =>
            {
                Console.WriteLine("迭代次数:{0},{1}", i, str);
                if (i > 3)
                    state.Break();
            });
            Console.WriteLine("是否完成:{0}", result.IsCompleted);
            Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);

            Console.Read();
        }

        /// <summary>
        /// 并行运行方法-Parallel.Invoke-并行任务执行无先后顺序
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            Parallel.Invoke(() =>
            {
                Thread.Sleep(100);
                Console.WriteLine("method1");
            }, () =>
            {
                Thread.Sleep(10);
                Console.WriteLine("method2");
            });

            Console.Read();
        }
    }
}

我的示例:

   ParallelLoopResult result= Parallel.ForEach(sims, (sim) =>
            {
                m_list_sim_channel.Add(new SimChannel(sim, (byte)new Random().Next(37)));
            });

            while (true)
            {
                if (result.IsCompleted)
                {
                    Console.WriteLine("m_list_sim_channel count=" + m_list_sim_channel.Count);
                    break;
                }
            }

参考文章:https://www.cnblogs.com/ricky-wang/p/7003162.html

posted @ 2024-09-27 10:56  boonya  阅读(37)  评论(0)    收藏  举报  来源
我有佳人隔窗而居,今有伊人明月之畔。
轻歌柔情冰壶之浣,涓涓清流梦入云端。
美人如娇温雅悠婉,目遇赏阅适而自欣。
百草层叠疏而有致,此情此思怀彼佳人。
念所思之唯心叩之,踽踽彳亍寤寐思之。
行云如风逝而复归,佳人一去莫知可回?
深闺冷瘦独自徘徊,处处明灯影还如只。
推窗见月疑是归人,阑珊灯火托手思忖。
庐居闲客而好品茗,斟茶徐徐漫漫生烟。

我有佳人在水之畔,瓮载渔舟浣纱归还。
明月相照月色还低,浅近芦苇深深如钿。
庐山秋月如美人衣,画堂春阁香气靡靡。
秋意幽笃残粉摇曳,轻轻如诉画中蝴蝶。
泾水潺潺取尔浇园,暮色黄昏如沐佳人。
青丝撩弄长裙翩翩,彩蝶飞舞执子手腕。
香带丝缕缓缓在肩,柔美体肤寸寸爱怜。
如水之殇美玉成欢,我有佳人清新如兰。
伊人在水我在一边,远远相望不可亵玩。