C#任務(wù)并行Parellel.For和Parallel.ForEach
簡(jiǎn)介:任務(wù)并行庫(kù)(Task Parellel Library)是BCL的一個(gè)類(lèi)庫(kù),極大的簡(jiǎn)化了并行編程。
使用任務(wù)并行庫(kù)執(zhí)行循環(huán)
C#當(dāng)中我們一般使用for和foreach執(zhí)行循環(huán),有時(shí)候我們呢的循環(huán)結(jié)構(gòu)每一次的迭代需要依賴(lài)以前一次的計(jì)算或者行為。但是有時(shí)候則不需要。如果迭代之間彼此獨(dú)立,并且程序運(yùn)行在多核處理器上,如果能將不同的迭代放到不同的處理器上并行處理,則會(huì)獲益匪淺。Parallel.For和Parallel.ForEach就是為此而生的。
①使用Parallel.For 聲明如下:
這里可以看到 toExclusive這個(gè)參數(shù),它是不含的, 在使用的時(shí)候傳入?yún)?shù)要注意下。
舉個(gè)例子:
static void Main(string[] args) { Parallel.For(0, 5, i => { //打印平方 Console.WriteLine("The Square of {0} is {1}", i, i * i); } ); Console.ReadKey(); }
執(zhí)行結(jié)果:
The Square of 0 is 0
The Square of 2 is 4
The Square of 1 is 1
The Square of 4 is 16
The Square of 3 is 9
從執(zhí)行結(jié)果上我們可以看到,它不是按順序執(zhí)行的。那么問(wèn)題來(lái)了,怎么讓結(jié)果保持有序?
我們可以通過(guò)一個(gè)數(shù)組來(lái)存儲(chǔ)執(zhí)行的結(jié)果,例如下面的例子:
static void Main(string[] args) { const int maxValues = 5; int[] Squares = new int[maxValues]; Parallel.For(0, maxValues , i =>Squares[i] = i*i ); for (int i = 0; i < maxValues; i++) Console.WriteLine("Square of {0} is {1}", i, Squares[i]); Console.ReadKey(); }
我們首先定義了一個(gè)數(shù)組,然后由于數(shù)組的下標(biāo)已經(jīng)定下來(lái)了,所以每次執(zhí)行都會(huì)存入具體的位置,然后遍歷結(jié)果的數(shù)組,就得到了有順序的結(jié)果。
②使用Parallel.ForEach
最簡(jiǎn)單的實(shí)現(xiàn),聲明如下:
舉例:
static void Main(string[] args) { string[] squares = new string[] {"We", "hold", "these", "truths", "to", "be", "self-evident", "that", "all", "men", "are", "created", "equal"}; Parallel.ForEach(squares, i => Console.WriteLine(string.Format("'{0}' has {1} letters", i, i.Length))); Console.ReadKey(); }
結(jié)果:
'We' has 2 letters
'hold' has 4 letters
'these' has 5 letters
'to' has 2 letters
'truths' has 6 letters
'self-evident' has 12 letters
'that' has 4 letters
'be' has 2 letters
'men' has 3 letters
'are' has 3 letters
'created' has 7 letters
'equal' has 5 letters
'all' has 3 letters
這里同樣可以看到,不是按順序遍歷的?!?/p>
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
C#結(jié)合數(shù)據(jù)庫(kù)實(shí)現(xiàn)驗(yàn)證識(shí)別ID卡內(nèi)容的方法
這篇文章主要介紹了C#結(jié)合數(shù)據(jù)庫(kù)實(shí)現(xiàn)驗(yàn)證識(shí)別ID卡內(nèi)容的方法,非常實(shí)用的功能,需要的朋友可以參考下2014-07-07C#中使用DevExpress中的ChartControl實(shí)現(xiàn)極坐標(biāo)圖的案例詳解
這篇文章主要介紹了在C#中使用DevExpress中的ChartControl實(shí)現(xiàn)極坐標(biāo)圖,本案例是使用的是DevExpress 18.1.3版本,之前在14版本上也試過(guò),但是有一個(gè)弊端就是實(shí)現(xiàn)極坐標(biāo)圖的時(shí)候,第一個(gè)點(diǎn)和最后一個(gè)點(diǎn)總是自動(dòng)多一條閉合線(xiàn),會(huì)形成一個(gè)閉合的多邊形,因此升級(jí)了一下版2022-02-02C#執(zhí)行Javascript代碼的幾種方法總結(jié)
本篇文章主要是對(duì)C#執(zhí)行Javascript代碼的幾種方法進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01c#實(shí)現(xiàn)sunday算法實(shí)例
Sunday算法思想跟BM算法很相似,在匹配失敗時(shí)關(guān)注的是文本串中參加匹配的最末位字符的下一位字符,下面是用C#實(shí)現(xiàn)sunday的實(shí)例代碼,有需要的朋友可以參考一下2013-08-08C#使用Automation實(shí)現(xiàn)控制自動(dòng)撥打接聽(tīng)電話(huà)
這篇文章主要為大家詳細(xì)介紹了C#如何使用Automation實(shí)現(xiàn)控制自動(dòng)撥打接聽(tīng)電話(huà),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02C#中動(dòng)態(tài)數(shù)組用法實(shí)例
這篇文章主要介紹了C#中動(dòng)態(tài)數(shù)組用法,實(shí)例分析了C#中ArrayList實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04