zoukankan      html  css  js  c++  java
  • 抽象线程之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();
            }
        }
    }
  • 相关阅读:
    Ubuntu 12.10 安装 jdk-7u10-linux-x64.tar.gz(转载)
    Android-- FragmentStatePagerAdapter分页(转载)
    Windows下安装Cygwin及包管理器apt-cyg(转)
    Androidi性能优化之多线程和同步
    Androidi性能优化之高效使用内存
    综合面试---常问知识点
    路由器
    域名系统
    IP地址与子网掩码
    网络层使用的协议
  • 原文地址:https://www.cnblogs.com/runninglzw/p/3848257.html
Copyright © 2011-2022 走看看