1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Diagnostics;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12.  
  13. namespace 多线程
  14. {
  15. public partial class Form1 : Form
  16. {
  17. public Form1()
  18. {
  19. InitializeComponent();
  20. }
  21.  
  22. /// <summary>
  23. /// 启用Task多线程
  24. /// </summary>
  25. /// <param name="sender"></param>
  26. /// <param name="e"></param>
  27. private void task_Click(object sender, EventArgs e)
  28. {
  29. List<Task> taskList = new List<Task>();
  30. TaskFactory taskFactory = new TaskFactory();
  31.  
  32. Console.WriteLine("=======>>>>开始");
  33. Action act1 = new Action(() => GetSum("张三"));
  34. Action act2 = new Action(()=>GetSum("李四"));
  35. Action act3 = new Action(()=>GetSum("王五"));
  36. taskList.Add(taskFactory.StartNew(act1));
  37. taskList.Add(taskFactory.StartNew(act2));
  38. taskList.Add(taskFactory.StartNew(act3));
  39.  
  40. Action<Task[]> actAll = new Action<Task[]>(t =>
  41. {
  42. Console.WriteLine("任务结束,开始执行联调。当前线程ID是{0}", Thread.CurrentThread.ManagedThreadId);
  43. Console.WriteLine("======>>>>>>完成");
  44. });
  45.  
  46. //只是等待某一个任务完成就可以结束或者继续再等待剩余的任务完成
  47. Task.WaitAny(taskList.ToArray());
  48. Console.WriteLine("一个任务已经完成了!!!!!!");
  49.  
  50. taskFactory.ContinueWhenAll(taskList.ToArray(), actAll);
  51.  
  52. //等待所有子线程任务完成,这种方法会卡住主线程
  53. //Task.WaitAll(new Task[] {taskAll});
  54.  
  55. }
  56.  
  57. private void GetSum(string name)
  58. {
  59. long sum = ;
  60. Stopwatch watch = new Stopwatch();
  61. watch.Start();
  62. for (int i = ; i < ; i++)
  63. {
  64. sum += i;
  65. }
  66. watch.Stop();
  67. Console.WriteLine("当前是:{0}在执行任务,sum结果是:{1},当前线程ID是{2},执行时间是{3}",name,sum,Thread.CurrentThread.ManagedThreadId,watch.ElapsedMilliseconds);
  68. }
  69. }
  70. }

多线程Task的更多相关文章

  1. .Net进阶系列(13)-异步多线程(Task和Parallel)(被替换)

    一. Task开启多线程的三种形式 1. 利用TaskFactory下的StartNew方法,向StartNew传递无参数的委托,或者是Action<object>委托. 2. 利用Tas ...

  2. C# 多线程task

    1.异步和多线程的区别?没什么太大区别.异步是目的,使用多线程实现.想想AJAX异步加载,不就是不想让浏览器界面卡住嘛,所以在程序中对于某些单独的操作,比如写日志,我们不想等它完成后再执行其它操作(因 ...

  3. 多线程--Task,等待用户输入AutoResetEvent

    上一篇文章:.NET:如何让线程支持超时?已经说明目前微软主推的多线程方案是task: 注意:Task最好引用.NET4.5. 4.0也行,但不成熟.Thread引用2.0就够了. 1.通过构造函数创 ...

  4. [.net 多线程]Task

    C# 异步编程Task整理(一) c# .Net并行和多线程编程之Task学习记录! .NET 实现并行的几种方式(一) Dispatcher介绍 [C#学习笔记]使用C#中的Dispatcher 用 ...

  5. 多线程-Task、await/async

    Task创建无返回值 Task是.netframwork4.0重新分装的多线程类.原因以前的多线程(thread threadpool)不好用.(.net framwork也是的发展的,现在的EF,刚 ...

  6. 线程——自定义多线程task

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. 异步多线程 Task理解

    一.简介 Task是.NET Framework4.0 TPL(任务并行库)提供的新的操作线程池线程的封装类.它提供等待.终止(取消).返回值.完成通知.失败通知.控制执行的先后次序等优化线程操作功能 ...

  8. C#多线程---Task实现异步

    一.场景 使用Task来进行累加操作. 二.例子-Task使用 1 using System; 2 using System.Collections.Generic; 3 using System.L ...

  9. .Net 多线程 异步编程 Await、Async和Task

    await和async简介   await和async是在C#5中引入,并且在.NetFramewor4.5以及.NetCore中进行了支持.主要是解决性能瓶颈,并且增强系统的响应能力. msdn关于 ...

随机推荐

  1. 算法(第4版) (Robert Sedgewick / Kevin Wayne 著)

    第1章 基础 第2章 排序 第3章 查找 第4章 图 第5章 字符串 第1章 基础 public class Bag<T> : IEnumerable<T> { ]; ; pu ...

  2. HI3516EV100 RTMP添加音频

    1.先试试只发音频 失败 2.保存音频,发送视频,成功

  3. react 子组件访问父组件的方法

    回调函数(推荐) 地址:https://ourcodeworld.com/articles/read/409/how-to-update-parent-state-from-child-compone ...

  4. Linux fdisk普通分区扩容

    买了一个orangepi 然后用7.4GB的内存卡,写入了一个lubuntu镜像,用去3.6GB还有3.8GB没有用,因为要编译mt7601u进ubuntu中,需要用到内核文件 但是内核压缩包1.2G ...

  5. centos7 如何在用户级对资源进行限制

    我们已经知道,centos7上建议使用sytemd进行资源限制. 本文主要介绍如何使用systemd进行用户级资源限制. 以orange用户为例. 方案一 临时有效 配置如下: # systemctl ...

  6. PxCook 像素大厨 标注切图,一起搞定!专注设计本质

    http://www.fancynode.com.cn/pxcook

  7. 分布式超级账本Hyperledger里zookeeper的作用

    Zookeeper是一种在分布式系统中被广泛用来作为:分布式状态管理.分布式协调管理.分布式配置管理.和分布式锁服务的集群.kafka增加和减少服务器都会在Zookeeper节点上触发相应的事件kaf ...

  8. Winfrom Chart实现数据统计

    简介 Chart图标根据实际使用情况,部分图表适用于多组数据的数据分析统计功能,例如柱状图:部分图表适用于单组数据的数据分析统计,例如饼状图. 主要属性 注意使用: Chart图表的如下属性:Lege ...

  9. Visio View:打开VSd时,IE弹出已停止工作。

    解决办法:关闭第三方扩展功能

  10. 黄聪:保持web页面生成的app一直处于用户登录状态不退出

    用户登录了会员中心,怎么保持登录状态! 由于封壳的内核及组件肯定没有浏览器APP应用那么强大,所以目前暂时的解决方案是: jquery.cookie.js  本文转载至:https://www.cnb ...