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. 几个方便进行micro frontend 开发的工具&&类库

    nodejs 类库 从当前来说nodejs 的npm 偏多,因为毕竟面向的是web 编程 tailor 一个layout 服务(基于fragment 的开发方式)https://github.com/ ...

  2. Truthy and Falsy Values and Equality Operators

    最近在学习JS.  有一些概念还希望跟大家分享出来 Truthy and Falsy Values Falsy Values: undefined, null, 0, '', NaN(not a nu ...

  3. day5 大纲

    01 昨日内容回顾 list: 增: append insert(index,object) extend() 迭代着追加 删: pop(默认删除最后一个)按照索引去删除 有返回值 remove 按照 ...

  4. haproxy(单机)+mysql集群负载均衡

    HAProxy是 七层代理 ,在使甠HAProxy后,在MySQL上 看不到Apps的源IP地址 ,看到的是HAProxy地址,而 MySQL的权限访问设置是和IP地址有关 ,这样就导致了MySQL无 ...

  5. py-day2-1 python 列表类 list的调用反法

    # append() 追加 [在原来值最后追加] test = [1,2,3,[88,99],'abc'] test.append(') print(test) [1, 2, 3, [88, 99], ...

  6. Zookeeper 基本概念学习

    1.Zookeeper简介: 1) 中间件,为分布式系统提供协调服务 2) 作用于分布式系统,发挥其优势,可以为大数据服务 3) 支持Java,提供java和c语言的客户端api 2. 分布式系统 1 ...

  7. pyhanlp 停用词与用户自定义词典功能详解

    hanlp的词典模式 之前我们看了hanlp的词性标注,现在我们就要使用自定义词典与停用词功能了,首先关于HanLP的词性标注方式具体请看HanLP词性标注集. 其核心词典形式如下: 自定义词典 自定 ...

  8. [转]jsPlumb插件做一个模仿viso的可拖拉流程图

    原贴:https://www.cnblogs.com/sggx/p/3836432.html 前言 这是我第一次写博客,心情还是有点小小的激动!这次主要分享的是用jsPlumb,做一个可以给用户自定义 ...

  9. Jumpserver 介绍

    安装jumperserver Sudo yum install –y git Su root Cd  /usr/local Mkdir jumpserver 安装等依赖包 yum -y install ...

  10. TensorFlow Saver的使用方法

    我们经常在训练完一个模型之后希望保存训练的结果,这些结果指的是模型的参数,以便下次迭代的训练或者用作测试.Tensorflow针对这一需求提供了Saver类. Saver类提供了向checkpoint ...