1. 通过Task启动多线程

2. 解决多线程的几大应用场景

  private void btnTask_Click(object sender, EventArgs e)
{
Console.WriteLine("************************btnTask_Click Begin*************************");
Console.WriteLine("Eleven老师接到私单项目");
Console.WriteLine("沟通需求,确认需求,谈价格");
Console.WriteLine("签合同,受50%的首期费用");
Console.WriteLine("老师筛选学员,组建团队");
Console.WriteLine("完成初步设计,系统分工");
Console.WriteLine("老师干活....."); TaskFactory factory = new TaskFactory(); //创建一个Task工厂
List<Task> tasklist = new List<Task>();
tasklist.Add(factory.StartNew( //匿名函数
delegate ()
{
this.coding("PoPo", "WCF");
}
));
tasklist.Add(factory.StartNew(() => this.coding("YoYo", "Portal")));
tasklist.Add(factory.StartNew(() => this.coding("DoDo", "Client")));
tasklist.Add(factory.StartNew(() => this.coding("WoWo", "WechatClient")));
tasklist.Add(factory.StartNew(() => this.coding("ToTo", "EAServer"))); //ContinueWhenAny会开一个新的子线程
//ContinueWhenAll会开一个新的子线程
tasklist.Add(factory.ContinueWhenAny(tasklist.ToArray(), t => Console.WriteLine("获得大红包 id={0}", Thread.CurrentThread.ManagedThreadId)));
tasklist.Add(factory.ContinueWhenAll(tasklist.ToArray(), tlist => Console.WriteLine("开始联调、部署、测试、验收 {0}", Thread.CurrentThread.ManagedThreadId))); //某个模块完成后收取20%
Task.WaitAny(tasklist.ToArray()); //任一子线程结束;卡住当前线程,让程序完成等待
Console.WriteLine("某个模块完成后, 收取剩下的20%"); //开发完成后收钱
Task.WaitAll(tasklist.ToArray()); //等待所有子线程结束;卡住当前线程,让程序完成等待
Console.WriteLine("收取剩下的30%");
Console.WriteLine("************************btnTask_Click end*************************");
}
private void coding(string username,string projectname)
{
Console.WriteLine("{0} {1} start coding {2},线程id={3}", DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss.fff"), username, projectname,Thread.CurrentThread.ManagedThreadId);
int icount = ;
for (int i = ; i < ; i++)
{
icount = i;
}
Console.WriteLine("{0} {1} end coding {2},线程id={3}", DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss.fff"), username, projectname, Thread.CurrentThread.ManagedThreadId);
}

运行结果

异步-学习笔记3 Task的更多相关文章

  1. c#异步学习笔记

    如下代码.只需要异步的处理一个数据,不需要等处理完成后,进行后继的操作.可以不用Async来修饰方法 static void Main(string[] args) { Test(); Console ...

  2. JavaScript异步学习笔记——主线程和任务队列

    任务队列 单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务.如果前一个任务耗时很长,后一个任务就不得不一直等着. 同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕, ...

  3. Swoft2.x 小白学习笔记 (三) --- Task、协程

    介绍swoft中 1.Task 2.协程 一:Task任务: 1.配置,在 app/bean.php文件中加入 'httpServer' => [ // ... 'on' => [ Swo ...

  4. js作用域、异步——学习笔记

    所有的 for if switch while do 等等,都属于块级作用域,里面声明的对象,外面也能访问.但function 函数里的作用域,在函数外是访问不到的. 但函数作用域里面可以访问外面. ...

  5. 多线程编程学习笔记——使用异步IO(一)

    接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 接上文 多线程编程学习笔记——使用并发集合(三) 假设以下场景,如果在客户端运行程序,最的事情之一是 ...

  6. 多线程编程学习笔记——异步调用WCF服务

    接上文 多线程编程学习笔记——使用异步IO 接上文 多线程编程学习笔记——编写一个异步的HTTP服务器和客户端 接上文 多线程编程学习笔记——异步操作数据库 本示例描述了如何创建一个WCF服务,并宿主 ...

  7. EF学习笔记(九):异步处理和存储过程

    总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇:EF学习笔记(八):更新关联数据 本篇原文:Async and Stored Procedures 为何要采用异步? ...

  8. 多线程编程学习笔记——使用异步IO

    接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 接上文 多线程编程学习笔记——使用并发集合(三) 假设以下场景,如果在客户端运行程序,最的事情之一是 ...

  9. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

随机推荐

  1. iOS-- pod常用命令

  2. 1103简单SQL 行转列思路

    转自http://www.cnblogs.com/lhj588/p/3315876.html -- 经典行列转化DROP TABLE IF EXISTS TabName;CREATE TABLE Ta ...

  3. 1011MySQL Query Cache学习笔记

    转自:http://blog.chinaunix.net/uid-16844903-id-321156.html 测试环境 MySQL 5.5 innodb_version 1.1.6 MySQL Q ...

  4. iSCSI 与 ceph

    SCSI  小型计算机系统接口(SCSI,Small Computer System Interface)是一种用于计算机及其周边设备之间(硬盘.软驱.光驱.打印机.扫描仪等)系统级接口的独立处理器标 ...

  5. nginx 的动静分离配置(tomcat)

    nginx+tomcat是想动静分离配置 首先在nginx的配置文件中添加tomcat的的集群配置 upstream tomcats { ip_hash; server 192.168.0.251:8 ...

  6. javascript 红宝书笔记之如何使用对象 如何操作数组

    对象定义  ===  引用类型,描述的是一类对象所具有的属性和方法     新对象的创建 方法     new + 构造函数       var person = new Object(); 对象字面 ...

  7. react 属性与状态 学习笔记

    知识点:1.react 属性的调用 this.props.被调用的属性名 设置属性的常用方法:var props = { one: '123', two: 321}调用这个属性:<HelloWo ...

  8. SpringMVC学习系列(8) 之 国际化

    一.基于浏览器请求的国际化实现: 1)在 spring的配置文件中添加 <bean id="messageSource" class="org.springfram ...

  9. maven-腾讯SDK(QQ)接口java引入pom配置

    maven的pom.xml配置 <dependency> <groupId>net.gplatform</groupId> <artifactId>Sd ...

  10. C#把datetime类型的日期转化成年月日或其他格式方法总结

    日期格式:yyyyMMdd HH:mm:ss(注意此字符串的字母大小写很严格) yyyy:代表年份MM:  代表月份dd:  代表天HH:  代表小时(24小时制)mm:  代表分钟ss:  代表秒D ...