同步单线程与异步多线程:
2..NetFramework的几种线程的迭代
3.Task方式的多线程应用
private void btnTask_Click(object sender, EventArgs e) { Console.WriteLine("多个Task异步线程启动 start {0}", Thread.CurrentThread.ManagedThreadId); Console.WriteLine("这里是一些同步线程方法1"); Console.WriteLine("这里是一些同步线程方法2"); Console.WriteLine("这里是一些同步线程方法3"); Console.WriteLine("这里是一些同步线程方法4"); Console.WriteLine("这里是一些同步线程方法5"); Console.WriteLine("这里是一些同步线程方法6"); //分析场景,线程应用范围,有严格时间限制和先后顺序的只能单线程 //多线程执行任务可以提升效率, 因为这些任务可以并发执行 //多线程不能优化不可分割的任务 List<Task> taskList = new List<Task>(); taskList.Add(Task.Run(() => { this.CodingProcess("Manuel", "coding"); })); taskList.Add(Task.Run(() => { this.CodingProcess("Wellers", "writing"); })); taskList.Add(Task.Run(() => { this.CodingProcess("April", "eating"); })); taskList.Add(Task.Run(() => { this.CodingProcess("Moon", "cooking"); })); taskList.Add(Task.Run(() => { this.CodingProcess("MX", "cleaning"); })); #region 使用TaskFactory不阻塞主线程 TaskFactory taskFactory = new TaskFactory(); //等待全部任务完成后,启动一个新的task来完成后续动作 taskList.Add(taskFactory.ContinueWhenAll(taskList.ToArray(), tArray => { Console.WriteLine($"项目完成,请贡献,部署联调测试 {Thread.CurrentThread.ManagedThreadId}"); }));//将这个线程也加入线程list,控制它在主线程执行前执行 #endregion #region 等待异步线程执行结束后继续执行 // Task.Run(() =>//意味着方法体被新线程执行,不会卡界面, // {//但不推荐,1.尽量不要线程套线程 2.全部由子线程完成 Task.WaitAny(taskList.ToArray()); //阻塞当前线程,直到任一任务结束 Console.WriteLine("项目进行到里程碑,支付20%费用"); //既需要多线程来提升性能,又需要在多线程全部完成后才能执行的操作 Task.WaitAll(taskList.ToArray()); //会阻塞当前线程,知道全部任务结束---主线程被阻塞了 Console.WriteLine("项目验收完毕,支付费用"); Console.WriteLine("多个Task异步线程启动 end {0}", Thread.CurrentThread.ManagedThreadId); // }); #endregion }
1