zoukankan      html  css  js  c++  java
  • C# Parallel用法

    C# Parallel用法

    1、Parallel.Invoke 主要用于任务的并行
      这个函数的功能和Task有些相似,就是并发执行一系列任务,然后等待所有完成。和Task比起来,省略了Task.WaitAll这一步,自然也缺少了Task的相关管理功能。它有两种形式:
      Parallel.Invoke( params Action[] actions);
      Parallel.Invoke(Action[] actions,TaskManager manager,TaskCreationOptions options);

    static void Test()
    {
        var actions = new Action[]
        {
            () => ActionTest("test 1"),
            () => ActionTest("test 2"),
            () => ActionTest("test 3"),
            () => ActionTest("test 4")
        };
        
        Console.WriteLine("Parallel.Invoke 1 Test");
        Parallel.Invoke(actions);
        
        Console.WriteLine("结束!");
    }
    
    static void ActionTest(object value)
    {
        Console.WriteLine(">>> thread:{0}, value:{1}",
        Thread.CurrentThread.ManagedThreadId, value);
    }

    2、For方法,主要用于处理针对数组元素的并行操作(数据的并行)

    static void Main(string[] args)
    {
        int[] nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
        Parallel.For(0, nums.Length, (i) =>
        {
            Console.WriteLine($"索引:{i},数组元素:{nums[i]},线程ID:{Thread.CurrentThread.ManagedThreadId});
        });
        Console.ReadKey();
    }

    3、Foreach方法,主要用于处理泛型集合元素的并行操作(数据的并行)

    public void Test()
    {
        List<int> nums = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
        Parallel.ForEach(nums, (item) =>
        {
            Console.WriteLine($"输出元素:{item}、线程ID:{Thread.CurrentThread.ManagedThreadId}" );
        });
        Console.ReadKey();
    }

    结语

          Parallel.For()和Paraller.ForEach()方法在每次迭代中调用相同的代码,而Parallel.Invoke()方法允许同时调用不同的方法。Parallel.ForEach()用于数据并行性,Parallel.Invoke()用于任务并行性;

  • 相关阅读:
    表值参数学习
    js闭包
    vue相关
    js的面向对象
    JavaScript中template模板引擎
    使用原生的ajax的步骤(五个步骤)
    (a ==1 && a== 2 && a==3) 有可能是 true 吗?
    这道JS笔试题你做对了吗?
    JS事件分类
    JS事件绑定模型
  • 原文地址:https://www.cnblogs.com/LoveHui0529/p/13028008.html
Copyright © 2011-2022 走看看