usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Collections.Concurrent;usingSystem.Threading;usingSystem.Diagnostics;namespaceConsoleApplication5{classProgram{staticvoidMain(string[]args){//并行LINQ//******************************************************//测试时间Stopwatchsw=Stopwatch.StartNew();longl=sw.ElapsedMilliseconds;//******************************************************constintmaxsize=100000000;vardata=newint[maxsize];Randomran=newRandom();for(inti=0;i<maxsize;i++){checked{data[i]=ran.Next(40);}}//===========================================并行查询//AsParallel()启用查询的并行化//AsParallel()返回ParallelQuery<T>,所以Where()、Select()等方法不在返回IEnumerable<T>,而返回ParallelQuery<T>varquery=(fromrindata.AsParallel()selectr).Take(20).Select(r=>r);Foreach(query);Console.WriteLine(data.AsParallel().Where(r=>r<20).Sum());//===========================================分区器List<int>il=Enumerable.Range(0,10000).ToList();//WithExecutionMode(ParallelExecutionMode.ForceParallelism)//强制并行化整个查询//WithDegreeOfParallelism()//指定最大任务数varquery2=(fromrinPartitioner.Create(il,true).AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism)wherer<20selectr).Sum();Console.WriteLine("====================================");Console.WriteLine(query2);Console.WriteLine("====================================");//===========================================取消长时间运行的任务vartoken=newCancellationTokenSource();newThread(()=>{try{varquery3=(fromrinil.AsParallel().WithCancellation(token.Token)wherer<20selectr).Sum();Console.WriteLine(query3);}catch(Exceptione){Console.WriteLine(e);}}).Start();if(Console.ReadLine()=="y"||Console.ReadLine()=="Y"){token.Cancel();}Console.ReadKey();}publicstaticvoidForeach<T>(IEnumerable<T>s){Console.WriteLine("==================================");foreach(varitemins){Console.WriteLine(item);}}}}