一、並行初試:
public static void test() { for (int i = 0; i < 10000; i++) { Console.WriteLine(i); } } public static void test1() { for (int i = 0; i < 10000; i++) { Console.WriteLine(i + "aaaaaaaaaaaaaaa"); } }
調用:
static void Main(string[] args) { Stopwatch sw = new Stopwatch(); sw.Start();//串列執行:test();test1();//並存執行:17Parallel.Invoke(test, test1);19sw.Stop();21Console.WriteLine("共耗費時間:");23Console.WriteLine(sw.ElapsedMilliseconds / 1000+"s");}
二、分區並行:
Parallel.ForEach(Partitioner.Create(1,20,5),(x,s)=>{ //並行代碼中自訂串列,第三個參數表示item1到item2之間的範圍 Console.WriteLine(x); for (int i = x.Item1; i < x.Item2; i++) { if (i == 10) break; Console.WriteLine(i); } s.Break();// 非常類似普通for迴圈中的break if (s.ShouldExitCurrentIteration) return; });
三、異常捕獲:AggregateException
int[] arry = new int[10001]; for (int i = 0; i < 10000; i++) { arry[i] = i; } try { Parallel.ForEach(arry, (x, s) => { Console.WriteLine(x); if (sw.Elapsed.Seconds > 3) { throw new TimeoutException("操作逾時"); } }); } catch (AggregateException ex) { foreach (var item in ex.InnerExceptions) { Console.WriteLine(item); } }
四、指定並行調度:
ParallelOptions options = new ParallelOptions(); options.MaxDegreeOfParallelism = 1;//如果設定為1就類似於串列代碼按順序執行 options.MaxDegreeOfParallelism =Environment.ProcessorCount;//擷取電腦上面的處理器數量 Parallel.For(1,10,options,(x) => { Console.WriteLine(x); });