class Program { static void Main(string[] args) { //线程 Thread t = new Thread((objectParam) => Console.WriteLine("线程执行方法,有无参数{0}", objectParam != null)); t.IsBackground = true; object obj = new object(); t.Start(obj); Console.WriteLine("执行线程"); //线程池 ThreadPool.QueueUserWorkItem((objectParam) => Console.WriteLine("线程方法加入匿名方法")); //并行循环Parallel int result = 0; int lockResult = 0; object lb = new object(); //并行循环 //并行循环用于一次执行多相同任务,或计算结果和循环的游标没有关系只和执行次数有关系的计算。 Parallel.For(0, 10, (i) => { result += 2; lock (lb) { lockResult += 2; Thread.Sleep(100); Console.WriteLine("i={0},lockResult={1}", i, lockResult); } Console.WriteLine("i={0},result={1}", i, result); }); //任务 一个可以有返回值(需要等待)的多线程工具 Task.Run(() => { Thread.Sleep(200); Console.WriteLine("Task 启动匿名方法"); }); Console.WriteLine("Task 默认不会阻塞"); //获取 Task.Result 会造成阻塞等待task 执行 int r = Task.Run(() => { Console.WriteLine("Task启动执行匿名方法并返回值"); Thread.Sleep(200); return 5; }).Result; Console.WriteLine("返回值是{0}", r); Program program = new Program(); Stopwatch stopwatch = new Stopwatch(); for (int i = 0; i < 50; i++) { #pragma warning disable 4014 program.MethodB(stopwatch, i); #pragma warning restore 4014 Console.WriteLine("普通方法{0}调用完成", i); } Stopwatch stopwatchb = new Stopwatch(); for (int j = 0; j < 50; j++) { #pragma warning disable 4014 program.MethodA(stopwatchb, j); #pragma warning restore 4014 Console.WriteLine("异步方法{0}调用完成", j); } Console.ReadKey(); } //异步和普通方法的区别,异步不需要等待线程执行结果。 //异步方法 public async Task<int> MethodA(Stopwatch stop, int i) { stop.Start(); int result = await Task.Run(() => { Console.WriteLine("异步方法{0}Task被执行", i); Thread.Sleep(100); return i * 2; }); Console.WriteLine("异步方法{0}执行完毕,结果{1}", i, result); if (i == 49) { stop.Stop(); Console.WriteLine("用时{0}", stop.ElapsedMilliseconds); } return result; } //普通方法 public int MethodB(Stopwatch stop, int i) { stop.Start(); int result = Task.Run(() => { Console.WriteLine("普通多线程方法{0}Task被执行", i); Thread.Sleep(100); return i * 2; }).Result; Console.WriteLine("普通方法{0}执行完毕,结果{1}", i, result); if (i == 49) { stop.Stop(); Console.WriteLine("用时{0}", stop.ElapsedMilliseconds); } return result; } }