zoukankan      html  css  js  c++  java
  • 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();
            }
  • 相关阅读:
    字符串_操作
    Error: Cannot find module 'webpack-cli/bin/config-yargs'
    ElementUI-Table 表头无法编辑问题
    ElementUI-Cascader组件同时支持懒加载和选择任意一级 问题踩坑
    vue强制刷新子组件
    footer部分,当页面主题内容不满一屏时,始终位于页面底部
    未知宽高的元素水平垂直居中方法总结
    fix元素居中
    link和@import引入css的区别
    Jquery拓展方法
  • 原文地址:https://www.cnblogs.com/Jerrycjc/p/7761636.html
Copyright © 2011-2022 走看看