• 抽象线程之Parallel类


    该类定义了并行的For和Foreach方法,Parallel类使用多个任务,因此需要多个线程来完成这个作业

    代码及简单注释如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Threading;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            //Parallel.For多次调用同一个方法
            static public void formathod()
            {
                //函数原型:Parallel.For<TLocal>(Int32, Int32, Func<TLocal>, Func<Int32, ParallelLoopState, TLocal, TLocal>, Action<TLocal>)
                //定义一个本地数据为string类型的数据,执行Func<TLocal>委托对本地数据初始化,然后将每个迭代调用一次Func<Int32, ParallelLoopState, TLocal, TLocal>委托,最后执行 Action<TLocal>委托对本地状态进行最后处理
                Parallel.For<string>(0, 20, () =>
                    {
                        Console.WriteLine("Task{0} is begin", Task.CurrentId);
                        return string.Format("Task{0}", Thread.CurrentThread.ManagedThreadId);
                    },
                    (i, pls, str) =>
                    {
                        Thread.Sleep(1000);
                        return string.Format("Task{0}", i);
                    },
                    (str) =>
                    {
                        Console.WriteLine("{0} is over", str);
                    });
            }
            static public void formathod1()
            {
                //函数原型:For(Int32, Int32, Action<Int32>)
                //以下实例则为从0迭代到10,每一次都调用Action<i>这个委托,返回参数提供了循环是否结束的消息
                ParallelLoopResult result =
                Parallel.For(0, 10, i =>
                    {
                        Thread.Sleep(100);
                        Console.WriteLine("Thread{0},Task{1}", Thread.CurrentThread.ManagedThreadId, Task.CurrentId);
                    });
                Console.WriteLine(result.IsCompleted);
            }
            static public void foreachmethod()
            {
                //Parallel.ForEach函数原型为:Parallel.ForEach<TSource>(IEnumerable<TSource>, Action<TSource>)
                //IEnumerable<TSource>为公开枚举数,该枚举数支持在指定类型的集合上进行简单迭代。
                //以下代码为迭代集合上的元素,并为他们执行lambda表达式(Action<TSource>委托)
                string[] data = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
                Parallel.ForEach<string>(data, s =>
                    {
                        Thread.Sleep(1000);
                        Console.WriteLine(s);
                    });
            }
            static void Main(string[] args)
            {
    
                formathod1();
                formathod();
                foreachmethod();
            }
        }
    }
  • 相关阅读:
    Java 文件操作大全
    JAVA 环境变量配置
    Spring MVC 环境搭建(maven+SpringMVC+mybatis+Freemarker)
    maven的安装,maven库配置和Eclipse插件的安装
    maven web项目不能创建src/main/java等文件夹的问题
    Java 高效检查一个数组中是否包含某个值
    java发送http的get、post请求
    Timequest静态时序分析(STA)基础
    QuartusII Design partion and logic lock
    FPGA优化之高扇出
  • 原文地址:https://www.cnblogs.com/runninglzw/p/3848257.html
Copyright © 2020-2023  润新知