该类定义了并行的For和Foreach方法,Parallel类使用多个任务,因此需要多个线程来完成这个作业
代码及简单注释如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading;namespace ConsoleApplication1 {class Program{//Parallel.For多次调用同一个方法static public void formathod(){//函数原型:Parallel.For<TLocal>(Int32, Int32, Func<TLocal>, Func<Int32, ParallelLoopState, TLocal, TLocal>, Action<TLocal>)//定义一个本地数据为string类型的数据,执行Func<TLocal>委托对本地数据初始化,然后将每个迭代调用一次Func<Int32, ParallelLoopState, TLocal, TLocal>委托,最后执行 Action<TLocal>委托对本地状态进行最后处理Parallel.For<string>(0, 20, () =>{Console.WriteLine("Task{0} is begin", Task.CurrentId);return string.Format("Task{0}", Thread.CurrentThread.ManagedThreadId);},(i, pls, str) =>{Thread.Sleep(1000);return string.Format("Task{0}", i);},(str) =>{Console.WriteLine("{0} is over", str);});}static public void formathod1(){//函数原型:For(Int32, Int32, Action<Int32>)//以下实例则为从0迭代到10,每一次都调用Action<i>这个委托,返回参数提供了循环是否结束的消息ParallelLoopResult result =Parallel.For(0, 10, i =>{Thread.Sleep(100);Console.WriteLine("Thread{0},Task{1}", Thread.CurrentThread.ManagedThreadId, Task.CurrentId);});Console.WriteLine(result.IsCompleted);}static public void foreachmethod(){//Parallel.ForEach函数原型为:Parallel.ForEach<TSource>(IEnumerable<TSource>, Action<TSource>)//IEnumerable<TSource>为公开枚举数,该枚举数支持在指定类型的集合上进行简单迭代。//以下代码为迭代集合上的元素,并为他们执行lambda表达式(Action<TSource>委托)string[] data = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };Parallel.ForEach<string>(data, s =>{Thread.Sleep(1000);Console.WriteLine(s);});}static void Main(string[] args){formathod1();formathod();foreachmethod();}} }