namespace TPLTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //var list = testFillParallel(); //int i = list.Count(); Stopwatch watch = new Stopwatch(); watch.Start(); for (int i = 1; i < 5; i++) { ProcessLongTime(i); } //watch.Stop(); this.label1.Text = string.Format("顺序执行用时:" + watch.ElapsedMilliseconds); watch.Restart(); //watch.Start(); Parallel.For(1, 5, p => { ProcessLongTime(p); //MessageBox.Show(p.ToString()); }); //watch.Stop(); this.label2.Text = string.Format("并行执行用时:" + watch.ElapsedMilliseconds); //watch.Restart(); ////watch.Start(); //for (int i = 1; i <= 5; i++) //{ // Task myTask = new Task(obj => ProcessLongTime((int)obj), i); // myTask.Start(); //} ////watch.Stop(); //this.label3.Text = string.Format("并行Task执行用时:" + watch.ElapsedMilliseconds); watch.Restart(); int count = 5; int results; Semaphore semaphore = new Semaphore(0, count); System.Threading.Tasks.Parallel.For(0, count, i => { results = ProcessLongTimeI(i); semaphore.Release(); }); //for (var i = 0; i <= count; i++) //{ // semaphore.WaitOne(); // //Console.WriteLine("Got " + i); //} watch.Stop(); this.label3.Text = string.Format("并行Task执行用时:" + watch.ElapsedMilliseconds); } private IEnumerable<Person> testFillParallel() { //var list = new List<Person>(9); var list = new BlockingCollection<Person>(9); //必须使用线程安全的集合类型 Enumerable.Range(1, 999).AsParallel().ForAll(n => { var name = "Person" + n%9; if (list.Count(p => p.Name == name) < 1) list.Add(new Person {Id = n, Name = name}); }); this.label1.Text=string.Format("Person's count is {0}", list.Count); return list; } private void ProcessLongTime(int mi) { for (int i = 0; i < 10000000; i++) { i++; i--; } } private int ProcessLongTimeI(int mi) { for (int i = 0; i < 10000000; i++) { i++; i--; } return mi; } private void button2_Click(object sender, EventArgs e) { List<int> ls=new List<int>(); for (int i = 0; i < 5; i++) { ls.Add(i); } Stopwatch watch = new Stopwatch(); watch.Start(); foreach (int i in ls) { ProcessLongTime(i); } this.label1.Text = string.Format("顺序执行用时:" + watch.ElapsedMilliseconds); watch.Restart(); Parallel.ForEach(ls,p=> { ProcessLongTime(p); //MessageBox.Show(p.ToString()); }); this.label2.Text = string.Format("并行执行用时:" + watch.ElapsedMilliseconds); watch.Restart(); int count = 5; int results; Semaphore semaphore = new Semaphore(0, ls.Count); System.Threading.Tasks.Parallel.ForEach(ls, p => { results = ProcessLongTimeI(p); semaphore.Release(); }); watch.Stop(); this.label3.Text = string.Format("并行Task执行用时:" + watch.ElapsedMilliseconds); } }