多线程Task
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的更多相关文章
- .Net进阶系列(13)-异步多线程(Task和Parallel)(被替换)
一. Task开启多线程的三种形式 1. 利用TaskFactory下的StartNew方法,向StartNew传递无参数的委托,或者是Action<object>委托. 2. 利用Tas ...
- C# 多线程task
1.异步和多线程的区别?没什么太大区别.异步是目的,使用多线程实现.想想AJAX异步加载,不就是不想让浏览器界面卡住嘛,所以在程序中对于某些单独的操作,比如写日志,我们不想等它完成后再执行其它操作(因 ...
- 多线程--Task,等待用户输入AutoResetEvent
上一篇文章:.NET:如何让线程支持超时?已经说明目前微软主推的多线程方案是task: 注意:Task最好引用.NET4.5. 4.0也行,但不成熟.Thread引用2.0就够了. 1.通过构造函数创 ...
- [.net 多线程]Task
C# 异步编程Task整理(一) c# .Net并行和多线程编程之Task学习记录! .NET 实现并行的几种方式(一) Dispatcher介绍 [C#学习笔记]使用C#中的Dispatcher 用 ...
- 多线程-Task、await/async
Task创建无返回值 Task是.netframwork4.0重新分装的多线程类.原因以前的多线程(thread threadpool)不好用.(.net framwork也是的发展的,现在的EF,刚 ...
- 线程——自定义多线程task
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 异步多线程 Task理解
一.简介 Task是.NET Framework4.0 TPL(任务并行库)提供的新的操作线程池线程的封装类.它提供等待.终止(取消).返回值.完成通知.失败通知.控制执行的先后次序等优化线程操作功能 ...
- C#多线程---Task实现异步
一.场景 使用Task来进行累加操作. 二.例子-Task使用 1 using System; 2 using System.Collections.Generic; 3 using System.L ...
- .Net 多线程 异步编程 Await、Async和Task
await和async简介 await和async是在C#5中引入,并且在.NetFramewor4.5以及.NetCore中进行了支持.主要是解决性能瓶颈,并且增强系统的响应能力. msdn关于 ...
随机推荐
- tailor+ skipper 实现micro-frontends 简单试用
tailor 在Mosaic 框架中扮演fragment 模版layout的处理,后端fragment可以用任何服务编写 tailor 主要就是进行layout的处理.tailor的是类似facebo ...
- Linux系统运维故障排查
一.思路 1.处理问题要求 2.一般思路 二.具体问题 1.网络问题 (1)网络不通 (2)网络很慢 2.硬件问题 3.操作系统问题 (1)系统无法正常启动 (2)系统运行慢或死机 4.服务或程序问题 ...
- 02HDFS架构
https://www.cnblogs.com/zhoujingyu/p/5040957.html https://blog.csdn.net/firstchange/article/details/ ...
- 轻量级web框架cicada----(转)
源码地址: https://github.com/TogetherOS/cicada 快速启动 下面来看看如何快速启动一个 HTTP 服务. 只需要创建一个 Maven 项目,并引入核心包. < ...
- highcharts 知识点
去掉版权: credits:{ enabled:true // 默认值,如果想去掉版权信息,设置为false即可 }
- spark机器学习
多层感知器(MLP) from __future__ import print_function from pyspark.ml.classification import MultilayerPer ...
- 运行Docker镜像
1. 检查本机Docker镜像 docker images 2. 下载hello-world镜像 docker pull hello-world 3. 运行docker镜像hello-world do ...
- Python打包文件夹的方法小结(zip,tar,tar.gz等)
本文实例讲述了Python打包文件夹的方法.分享给大家供大家参考,具体如下: 一.zip ? 1 2 3 4 5 6 7 8 9 10 11 import os, zipfile #打包目录为zip文 ...
- delphi读取xml文件
功能: 根据省份更新地市信息 -------------------------------------------------------------------------------} proc ...
- 解决Windows远程桌面连接每次都提示输入密码的问题,远程桌面记不住密码
FROM:http://www.veryhuo.com/a/view/80444.html Windows 远程桌面连接几乎每天都用,所以使用的方便性非常重要.如果你经常用,也许会发现在某些系统中,每 ...