C# Task多线程
来自Eleven老师示例
private void btnTask_Click(object sender, EventArgs e) { Console.WriteLine(); Console.WriteLine("******************btnTask_Click 异步方法 start {0}********************", Thread.CurrentThread.ManagedThreadId); //Thread thread = new Thread(() => Console.WriteLine("Thread,,{0}", Thread.CurrentThread.ManagedThreadId)); //thread.Start(); //ThreadPool.QueueUserWorkItem(t => Console.WriteLine("ThreadPool,,{0}", Thread.CurrentThread.ManagedThreadId)); //new Action(() => Console.WriteLine("异步调用,,{0}", Thread.CurrentThread.ManagedThreadId)).BeginInvoke(null, null); //Task task = Task.Run(() => Console.WriteLine("Task,,{0}", Thread.CurrentThread.ManagedThreadId)); //Parallel.Invoke() Console.WriteLine("Eleven接到一个项目"); Console.WriteLine("沟通需求,确认需求,谈妥价格"); Console.WriteLine("签合同收取50%费用"); Console.WriteLine("高级班筛选学员,组建团队"); Console.WriteLine("需求分析,系统设计,模块划分"); Console.WriteLine("开始干活。。。。");//都是eleven老师干的 所以是主线程 //多人一起干活,,是不是 该用多线程了 TaskFactory taskFactory = new TaskFactory(); List<Task> taskList = new List<Task>(); //有个问题,如果想每个task后都输出一个进度,怎么办? taskList.Add(taskFactory.StartNew(() => this.Coding("backbone", "Client")));//.ContinueWith( taskList.Add(taskFactory.StartNew(() => this.Coding("滑猪小板", "DB "))); taskList.Add(taskFactory.StartNew(() => this.Coding("Adan", "WechatClient"))); taskList.Add(taskFactory.StartNew(() => this.Coding("SoWhat", "BackService"))); taskList.Add(taskFactory.StartNew(() => this.Coding("馒头哥", "Protal"))); //有没有又等待,又不卡界面的 (new 一个子线程,全包裹起来,然后waitall) taskList.Add(taskFactory.ContinueWhenAny(taskList.ToArray(), t => Console.WriteLine("第一个完成的获取红包奖励 {0}", Thread.CurrentThread.ManagedThreadId))); taskList.Add(taskFactory.ContinueWhenAll(taskList.ToArray(), tList => Console.WriteLine("进入一个联调测试阶段 {0}", Thread.CurrentThread.ManagedThreadId))); Task.WaitAny(taskList.ToArray());//等待任意一个任务的完成,会阻塞当前线程 Console.WriteLine("某个模块开发完成后,老师部署起来准备测试"); Task.WaitAll(taskList.ToArray());//等待所有任务的完成,会阻塞当前线程 Console.WriteLine("开发验收完毕,老师收取剩余费用"); Console.WriteLine("项目结束后,老师给大家分钱"); Console.WriteLine("******************btnTask_Click 异步方法 end {0}********************", Thread.CurrentThread.ManagedThreadId); Console.WriteLine(); }