花了半天整理了多线程、异步、同步相关的几个对象
Thread 创建一个线程进行多线程工作 Thread t = new Thread(new ThreadStart(() => { Console.WriteLine("T"); })); t.Start(); ThreadPool 把线程托管到.NET线程池中,减少了线程创建的开销 ThreadPool.QueueUserWorkItem((objState) => { Console.WriteLine(objState.ToString()); }, "a"); BackgroundWorker 把线程托管到内部线程池,并且提供了信息进度反馈的能力 BackgroundWorker b = new BackgroundWorker(); b.WorkerReportsProgress = true; b.DoWork += (s, e) => { for (int i = 1; i < 100; i++) { b.ReportProgress(i); Thread.Sleep(100); } }; b.ProgressChanged += (s, e) => { Console.WriteLine(e.ProgressPercentage.ToString()); }; b.RunWorkerAsync(); Task 增强了ThreadPool的能力,支持线程停止,状态返回、线程等待 CancellationTokenSource cts = new CancellationTokenSource(); Task t = new Task((ct) => { while (!((CancellationTokenSource)ct).IsCancellationRequested) { Console.WriteLine(DateTime.Now.ToString()); Thread.Sleep(200); } return; },cts); Console.WriteLine("Begin"); t.Start(); t.ContinueWith((s) => { Console.WriteLine("End"); }); //await a.ConfigureAwait(false);//支持线程等待 Console.Read(); cts.Cancel(); Console.Read(); Parallel 简化同步状态下Task的使用,多余多个任务同步状态下并行执行提供帮助 List<int> nums = new List<int>() { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; Parallel.ForEach(nums, (i) => { Console.WriteLine(i.ToString()); }); Parallel.Invoke(() => { Console.WriteLine("Begin"); Thread.Sleep(2000); Console.WriteLine("End"); }, () =>{ Console.WriteLine("Begin"); Thread.Sleep(2000); Console.WriteLine("End"); }); PLinq Parallel方式在Linq下的实现 List<int> nums = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; nums.AsParallel().ForAll((x) => { Console.WriteLine(x.ToString()); }); async await 用同步的编程方式编写异步代码,主要用于解决一部代码编写代码臃肿的情况,异步执行的Task被他用await等待同步执行 public async static void AA() { for (int i = 0; i < 100; i++) { int i2 = await Sleep(i); Console.WriteLine(i.ToString()); } } public static Task<int> Sleep(int i) { var t= new Task<int>(() => { Thread.Sleep(1000); return i * i; }); t.Start(); return t; }