詳解C# parallel中并行計(jì)算的四種寫法總結(jié)
在C#中,parallel關(guān)鍵字用于并行計(jì)算。
在數(shù)據(jù)集的處理當(dāng)中,我們需要針對(duì)每一行來進(jìn)行處理,行之間沒有關(guān)聯(lián),這個(gè)時(shí)候就可以應(yīng)用并行處理來增加程序的靈活性。
在字典、列表或者數(shù)據(jù)集合當(dāng)中也常見到這樣的應(yīng)用。
下面列舉的是parallel應(yīng)用的四種寫法。
效果圖

一般的循環(huán),結(jié)果就是同步循環(huán):
for (int i=0;i<12;i++)
{
textBox1.Text = textBox1.Text + $"循環(huán)數(shù):{i}" + Environment.NewLine;
}
并行寫法1
Parallel.For(0, 12, i =>
{
textBox2.BeginInvoke(() =>
{
textBox2.Text = textBox2.Text + $"循環(huán)數(shù):{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 + $"循環(huán)數(shù):{i}" + Environment.NewLine;
});
});
并行寫法3
Parallel.Invoke(
new Action(() =>
{
for (int i = 0; i < 4; i++)
{
textBox4.BeginInvoke(() =>
{
textBox4.Text = textBox4.Text + $"循環(huán)數(shù):{i},1-4" + Environment.NewLine;
});
}
}),
new Action(() =>
{
for (int i = 4; i < 8; i++)
{
textBox4.BeginInvoke(() =>
{
textBox4.Text = textBox4.Text + $"循環(huán)數(shù):{i},4-8" + Environment.NewLine;
});
}
}),
new Action(() =>
{
for (int i = 8; i < 12; i++)
{
textBox4.BeginInvoke(() =>
{
textBox4.Text = textBox4.Text + $"循環(huán)數(shù):{i},8-11" + Environment.NewLine;
});
}
}));
上面的寫法不明了,可以單獨(dú)寫成函數(shù)定義樣式:
private void func1()
{
for (int i = 0; i < 4; i++)
{
textBox4.BeginInvoke(() =>
{
textBox4.Text = textBox4.Text + $"循環(huán)數(shù):{i},0-3" + Environment.NewLine;
});
}
}
private void func2()
{
for (int i = 4; i < 8; i++)
{
textBox4.BeginInvoke(() =>
{
textBox4.Text = textBox4.Text + $"循環(huán)數(shù):{i},4-7" + Environment.NewLine;
});
}
}
private void func3()
{
for (int i = 8; i < 12; i++)
{
textBox4.BeginInvoke(() =>
{
textBox4.Text = textBox4.Text + $"循環(huán)數(shù):{i},8-11" + Environment.NewLine;
});
}
}
然后調(diào)用,這樣看就清晰多了:
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 + $"循環(huán)數(shù):{x}" + Environment.NewLine;
});
}
);
實(shí)際編寫過程中,可以根據(jù)自己的喜好來使用這些語法糖。
到此這篇關(guān)于詳解C# parallel中并行計(jì)算的四種寫法總結(jié)的文章就介紹到這了,更多相關(guān)C# parallel并行計(jì)算內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# Lambda表達(dá)式及Lambda表達(dá)式樹的創(chuàng)建過程
這篇文章主要介紹了C# Lambda表達(dá)式及Lambda表達(dá)式樹的創(chuàng)建過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
C#使用CancellationTokenSource 取消 Task的方法
因?yàn)樯婕暗搅巳粘=?jīng)常會(huì)碰到的取消任務(wù)操作,本文主要介紹了C#使用CancellationTokenSource 取消 Task,文中通過代碼介紹的非常詳細(xì),感興趣的可以了解一下2022-02-02
C#編程實(shí)現(xiàn)查看剪切板內(nèi)容的方法
這篇文章主要介紹了C#編程實(shí)現(xiàn)查看剪切板內(nèi)容的方法,涉及C#針對(duì)剪切板操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
C#實(shí)現(xiàn)類似新浪微博長(zhǎng)URL轉(zhuǎn)短地址的方法
這篇文章主要介紹了C#實(shí)現(xiàn)類似新浪微博長(zhǎng)URL轉(zhuǎn)短地址的方法,涉及C#操作正則表達(dá)式的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
探討C#中Dispose方法與Close方法的區(qū)別詳解
本篇文章是對(duì)C#中Dispose方法與Close方法的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06

