using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms; namespace 多线程
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} /// <summary>
/// 启用Task多线程
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void task_Click(object sender, EventArgs e)
{
List<Task> taskList = new List<Task>();
TaskFactory taskFactory = new TaskFactory(); Console.WriteLine("=======>>>>开始");
Action act1 = new Action(() => GetSum("张三"));
Action act2 = new Action(()=>GetSum("李四"));
Action act3 = new Action(()=>GetSum("王五"));
taskList.Add(taskFactory.StartNew(act1));
taskList.Add(taskFactory.StartNew(act2));
taskList.Add(taskFactory.StartNew(act3)); Action<Task[]> actAll = new Action<Task[]>(t =>
{
Console.WriteLine("任务结束,开始执行联调。当前线程ID是{0}", Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("======>>>>>>完成");
}); //只是等待某一个任务完成就可以结束或者继续再等待剩余的任务完成
Task.WaitAny(taskList.ToArray());
Console.WriteLine("一个任务已经完成了!!!!!!"); taskFactory.ContinueWhenAll(taskList.ToArray(), actAll); //等待所有子线程任务完成,这种方法会卡住主线程
//Task.WaitAll(new Task[] {taskAll}); } private void GetSum(string name)
{
long sum = ;
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = ; i < ; i++)
{
sum += i;
}
watch.Stop();
Console.WriteLine("当前是:{0}在执行任务,sum结果是:{1},当前线程ID是{2},执行时间是{3}",name,sum,Thread.CurrentThread.ManagedThreadId,watch.ElapsedMilliseconds);
}
}
}

多线程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. 06SVM线性不可分时scikit-learn实现

    https://blog.csdn.net/weixin_40123108/article/details/84378202 In [5]: from time import time import ...

  2. DevExpress Cpicturebox或者Dev控件 PictureEdit 按比例的缩放加载图片

    方法一:     如果要加载的图片的长宽比不是太过失衡, 1.可以改变picturebox的SizeMode属性为 PictureBoxSizeMode.StretchImage, 2.或者Dev控件 ...

  3. JavaScript 中 this的指向

    this 一方面便利了让大家在JS开发当, 但是另一方面让开发者头痛的是不清楚this 指代什么. 指向全局Window: <script> console.log(this); < ...

  4. egg 知识点

    egg 的约定 约定 使用方法 路由对应controller中的方法 举例:router.get('/', controller.home.index);,此时对应app/controller/hom ...

  5. eclipse中如何去掉复制代码有行号的数字

    当我想查找别人资料,想复制别人的代码,但别人的代码中序号行数数字,怎么能快速去除呢,如以下截图所示  首先将你的带有行号的代码拷到一个类中.你会看到一大堆的错误,不用急.   注意将视图切换到java ...

  6. java byte数组与String的相互转换

    String  ->   byte数组 String str = "abc天"; byte[] btr = str.getBytes(); System.out.printl ...

  7. HanLP极致简繁转换详细讲解

    HanLP极致简繁转换详细讲解 作者: hankcs(大快高级研究员 hanlp项目负责人) 谈起简繁转换,许多人以为是小意思,按字转换就行了.事实上,汉语历史悠久,地域复杂,发展至今在字符级别存在“ ...

  8. ML: 降维算法-LLE

    局部线性嵌入 (Locally linear embedding)是一种非线性降维算法,它能够使降维后的数据较好地保持原有 流形结构 .LLE可以说是流形学习方法最经典的工作之一.很多后续的流形学习. ...

  9. Excel技巧--让折线图带面积更直观生动

    上图为带面积的折线图,比单纯的折线图更直观更好看. 制作办法: 1.先制作纯折线图: 2.再复制一遍数据列,选中图表,点击粘贴(ctrl+v): 3.右键图表,点击“更改图表类型”,对话框如下设置: ...

  10. 用DLL实现插件的简单演示

    这是DLL的代码 library MyDll; uses SysUtils, Dialogs, Classes; procedure ShowInfo(info:PChar);stdcall; beg ...