日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

詳解C#?parallel中并行計算的四種寫法總結_C#教程

作者:dawn ? 更新時間: 2022-12-24 編程語言

在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;
                });
            }
            );

實際編寫過程中,可以根據自己的喜好來使用這些語法糖。

原文鏈接:https://blog.csdn.net/dawn0718/article/details/128072277

欄目分類
最近更新