麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

關于Parallel.For/Foreach并行方法中的localInit,body,localFinally使用

2019-11-14 16:49:15
字體:
來源:轉載
供稿:網友

對集合成員的操作往往可以通過并行來提高效率,.NET Parallel類提供了簡單的方法來幫助我們實現這種并行,比如Paralle.For/ForEach/Invoke方法。

其中,For/ForEach方法提供了重載,允許我們提供3個delegate,來實現對thread行為的控制。

函數聲明如下:

public static ParallelLooPResult ForEach<TSource, TLocal>(IEnumerable<TSource> source,

Func<TLocal> localInit,

Func<TSource, ParallelLoopState, long, TLocal, TLocal> body,

Action<TLocal> localFinally);

 

public static ParallelLoopResult ForEach<TSource, TLocal>(IEnumerable<TSource> source,

Func<TLocal> localInit,

Func<TSource, ParallelLoopState, TLocal, TLocal> body,

Action<TLocal> localFinally);

 

上面2個聲明的差別在于一個long型輸入參數,這個參數是元素在集合中的index,由CLR傳遞給body函數。

需要注意的是,localInit只是在每個task/thread開始參與到對集合元素的處理時執行一次,而不是針對每個集合元素都執行一次,類似的,localFinally只有在task/thread完成所有分配給它的任務之后,才被執行一次。

CLR會為每個Thread/Task維護一個thread-local storage,可以理解為thread/task在整個執行過程中的狀態。

當一個thread/task參與到執行中時,localInit中返回的TLocal類型值會被作為這個狀態的初始值,隨著body的執行,這個狀態值會被改變,而body的返回類型也是TLocal,意味著每一次body執行結束,會把最新的TLocal值返回給CLR,而CLR會把這個值設置到thread/taskthread-local storage上去,從而實現thread/task狀態的更新。

最后,localFinally可以返回這個狀態值,作為thread/task完成它所負責的所有處理任務后的最終結果。

 

參考:(http://msdn.microsoft.com/en-us/library/dd783359%28v=vs.110%29.aspx

CLR via C# 4th Edition Ch.27 Parallel's Static For, ForEach, and InvokeMethods.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91看片成人 | 亚洲视频在线免费看 | www国产成人免费观看视频 | 91精品国产91热久久久做人人 | 亚州精品天堂中文字幕 | 精品一二三区视频 | 毛片在线视频观看 | 一区二区久久精品66国产精品 | 欧美成人精品一区二区男人小说 | 久草在线手机视频 | 99精品在线观看 | 久久91精品 | 久久性生活免费视频 | 19禁国产精品福利视频 | 中文字幕欧美视频 | 视频在线色 | 欧美城网站地址 | 在线成人免费观看视频 | 麻豆一区二区99久久久久 | 成人情欲视频在线看免费 | 国产精品久久久久久238 | 中文字幕在线观看1 | 国产交换3p国产精品 | av在线更新 | 色七七网站 | 国产精品色综合 | 午夜视频色| 国产69精品99久久久久久宅男 | 久久精品视频1 | 成人激情在线 | 久久国产精品免费视频 | 日韩伦理电影免费观看 | 欧美一级黄色网 | 国产精品久久久久久久不卡 | 曰本三级日本三级日本三级 | 成人情欲视频在线看免费 | 草莓福利视频在线观看 | 成人短视频在线观看 | 羞羞电影网 | 亚洲午夜精品视频 | 亚洲国产综合在线观看 |