详解C# parallel中并行计算的四种写法总结

 更新时间:2022年11月28日 08:28:15   作者:dawn  
在C#中,parallel关键字可以用于并行计算。本文为大家总结了四种C# parallel并行计算的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下

在C#中,parallel关键字用于并行计算。

在数据集的处理当中,我们需要针对每一行来进行处理,行之间没有关联,这个时候就可以应用并行处理来增加程序的灵活性。

在字典、列表或者数据集合当中也常见到这样的应用。

下面列举的是parallel应用的四种写法。

效果图

一般的循环,结果就是同步循环:

            for (int i=0;i<12;i++)
            {
                textBox1.Text = textBox1.Text + $"循环数:{i}" + Environment.NewLine;
            }

并行写法1

            Parallel.For(0, 12, i =>
            {
                textBox2.BeginInvoke(() =>
                {
                    textBox2.Text = textBox2.Text + $"循环数:{i}" + Environment.NewLine;
                });
            });

并行写法2

            int[] x = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
            Parallel.ForEach(x, i =>
            {
                textBox3.BeginInvoke(() =>
                {
                    textBox3.Text = textBox3.Text + $"循环数:{i}" + Environment.NewLine;
                });
            });

并行写法3

            Parallel.Invoke(
            new Action(() =>
            {
                for (int i = 0; i < 4; i++)
                {
                    textBox4.BeginInvoke(() =>
                    {
                        textBox4.Text = textBox4.Text + $"循环数:{i},1-4" + Environment.NewLine;
                    });
                }
            }),
            new Action(() =>
            {
                for (int i = 4; i < 8; i++)
                {
                    textBox4.BeginInvoke(() =>
                    {
                        textBox4.Text = textBox4.Text + $"循环数:{i},4-8" + Environment.NewLine;
                    });
                }
 
            }),
            new Action(() =>
            {
                for (int i = 8; i < 12; i++)
                {
                    textBox4.BeginInvoke(() =>
                    {
                        textBox4.Text = textBox4.Text + $"循环数:{i},8-11" + Environment.NewLine;
                    });
                }
            }));

上面的写法不明了,可以单独写成函数定义样式:

        private void func1()
        {
            for (int i = 0; i < 4; i++)
            {
                textBox4.BeginInvoke(() =>
                {
                    textBox4.Text = textBox4.Text + $"循环数:{i},0-3" + Environment.NewLine;
                });
            }
        }
 
        private void func2()
        {
            for (int i = 4; i < 8; i++)
            {
                textBox4.BeginInvoke(() =>
                {
                    textBox4.Text = textBox4.Text + $"循环数:{i},4-7" + Environment.NewLine;
                });
            }
        }
 
        private void func3()
        {
            for (int i = 8; i < 12; i++)
            {
                textBox4.BeginInvoke(() =>
                {
                    textBox4.Text = textBox4.Text + $"循环数:{i},8-11" + Environment.NewLine;
                });
            }
        }

然后调用,这样看就清晰多了:

Parallel.Invoke(func1, func2, func3);

并行写法4

            int[] x = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
            await Parallel.ForEachAsync(x,new ParallelOptions() { MaxDegreeOfParallelism=3},async (x,_) =>
            {
                textBox4.BeginInvoke(async () =>
                {
                   textBox4.Text = textBox4.Text + $"循环数:{x}" + Environment.NewLine;
                });
            }
            );

实际编写过程中,可以根据自己的喜好来使用这些语法糖。

到此这篇关于详解C# parallel中并行计算的四种写法总结的文章就介绍到这了,更多相关C# parallel并行计算内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#中实体类与XML相互转换方式

    C#中实体类与XML相互转换方式

    这篇文章主要介绍了C#中实体类与XML相互转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • c#中LINQ的基本用法(二)

    c#中LINQ的基本用法(二)

    这篇文章介绍了c#中LINQ的基本用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下的相关资料
    2022-04-04
  • C# Lambda表达式及Lambda表达式树的创建过程

    C# Lambda表达式及Lambda表达式树的创建过程

    这篇文章主要介绍了C# Lambda表达式及Lambda表达式树的创建过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • C#使用CancellationTokenSource 取消 Task的方法

    C#使用CancellationTokenSource 取消 Task的方法

    因为涉及到了日常经常会碰到的取消任务操作,本文主要介绍了C#使用CancellationTokenSource 取消 Task,文中通过代码介绍的非常详细,感兴趣的可以了解一下
    2022-02-02
  • 详解C#设计模式编程中生成器模式的使用

    详解C#设计模式编程中生成器模式的使用

    这篇文章主要介绍了详解C#设计模式编程中生成器模式的使用,生成器模式主张创建对象的过程和对象的表现应该分离开来,需要的朋友可以参考下
    2016-02-02
  • C#自定义控件指示灯效果

    C#自定义控件指示灯效果

    在C#中实现一个指示灯控件,可以通过GDI+技术绘制,首先使用Pen对象绘制外环,然后用SolidBrush对象填充内圆,通过RectangleF定义绘制和填充的边界,控件的属性包括颜色、间隙、外环宽度等,本文给大家介绍C#自定义控件指示灯效果,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • C#编程实现查看剪切板内容的方法

    C#编程实现查看剪切板内容的方法

    这篇文章主要介绍了C#编程实现查看剪切板内容的方法,涉及C#针对剪切板操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • C#实现类似新浪微博长URL转短地址的方法

    C#实现类似新浪微博长URL转短地址的方法

    这篇文章主要介绍了C#实现类似新浪微博长URL转短地址的方法,涉及C#操作正则表达式的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • unity实现翻页效果

    unity实现翻页效果

    这篇文章主要为大家详细介绍了unity实现翻页效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • 探讨C#中Dispose方法与Close方法的区别详解

    探讨C#中Dispose方法与Close方法的区别详解

    本篇文章是对C#中Dispose方法与Close方法的区别进行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论