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();
        }

 

posted @ 2017-10-31 15:09  chenjingchun  阅读(1433)  评论(0编辑  收藏  举报