/// <summary>
/// 基于Task的多线程
/// </summary>
public class Tasks
{
public static void TaskAction()
{
Console.WriteLine("********************开始当前线程为{0}", Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("接到一个项目");
Console.WriteLine("沟通,谈价钱");
Console.WriteLine("收去50%的费用......");
Console.WriteLine("需求分析,设计系统");
TaskFactory taskFactory = new TaskFactory();
List<Task> TaskList = new List<Task>();
Action action1 = () => StarPoj("张三");
TaskList.Add(taskFactory.StartNew(action1));
Action action2 = () => StarPoj("李四");
TaskList.Add(taskFactory.StartNew(action2));
Action action3 = () => StarPoj("王五");
TaskList.Add(taskFactory.StartNew(action3));
Action action4 = () => StarPoj("赵六");
TaskList.Add(taskFactory.StartNew(action4)); Action<Task[]> ActAll = new Action<Task[]>(t => Console.WriteLine("开发完成,进行联调,当前线程为{0}", Thread.CurrentThread.ManagedThreadId));
Task taskAll= taskFactory.ContinueWhenAll(TaskList.ToArray(), ActAll);//等待TaskList线程集合完成后再开启ActAll另一个线程 Task.WaitAny(TaskList.ToArray());//等待某一个线程完成再执行
Console.WriteLine("测试,收取20%费用");
//Task.WaitAll(TaskList.ToArray());//等待所有的线程完成
Task.WaitAll(new Task[] { taskAll });//等待taskAll该线程完成后再执行
Console.WriteLine("收钱");
Console.WriteLine("********************结束当前线程为{0}", Thread.CurrentThread.ManagedThreadId);
} public static void StarPoj(string name)
{
Console.WriteLine("{0}开始编码,当前线程为{1}", name, Thread.CurrentThread.ManagedThreadId);
}
}

基于Task的多线程的更多相关文章

  1. C# Winform 基于Task的异步与延时执行

    一.Task的机制   Task位于命名空间System.Threading.Tasks中,是.NET 4.0加入的新模块,其实现机制大致类似于线程池ThreadPool,不过对于ThreadPool ...

  2. Task C# 多线程和异步模型 TPL模型 【C#】43. TPL基础——Task初步 22 C# 第十八章 TPL 并行编程 TPL 和传统 .NET 异步编程一 Task.Delay() 和 Thread.Sleep() 区别

    Task C# 多线程和异步模型 TPL模型   Task,异步,多线程简单总结 1,如何把一个异步封装为Task异步 Task.Factory.FromAsync 对老的一些异步模型封装为Task ...

  3. .Net Core WebAPI 基于Task的同步&异步编程快速入门

    .Net Core WebAPI 基于Task的同步&异步编程快速入门 Task.Result async & await 总结 并行任务(Task)以及基于Task的异步编程(asy ...

  4. 实践基于Task的异步模式

    Await 返回该系列目录<基于Task的异步模式--全面介绍> 在API级别,实现没有阻塞的等待的方法是提供callback(回调函数).对于Tasks来说,这是通过像ContinueW ...

  5. 实现基于Task的异步模式

    返回该系列目录<基于Task的异步模式--全面介绍> 生成方法 编译器生成 在.NET Framework 4.5中,C#编译器实现了TAP.任何标有async关键字的方法都是异步方法,编 ...

  6. 基于Task的异步模式的定义

    返回该系列目录<基于Task的异步模式--全面介绍> 命名,参数和返回类型 在TAP(Task-based Asynchronous Pattern)中的异步操作的启动和完成是通过一个单独 ...

  7. 基于Task的异步模式--全面介绍

    今天是国庆长假第一天,也是今天十月的开始.每到这个时候都是看海的季节-一个看"人海"的季节.反正我是不想在这样一个尴尬期出去放松自己,于是不如在家写写博客,长点本领呢.今天就来给大 ...

  8. C# -- 使用 Task 执行多线程任务

    C# -- 使用 Task 执行多线程任务 1. 使用 Task 执行多线程任务 class Program { static void Main(string[] args) { Task task ...

  9. 基于tcp和多线程的多人聊天室-C语言

    之前在学习关于网络tcp和多线程的编程,学了知识以后不用一下总绝对心虚,于是就编写了一个基于tcp和多线程的多人聊天室. 具体的实现过程: 服务器端:绑定socket对象->设置监听数-> ...

随机推荐

  1. Markdown 小记

    在学习Markdown之前,对稍有轻微强迫症的我来说,写博客和做笔记是一件很痛苦的事.废话不多说直接来看,偷偷吐槽:不知道咋在博客园配置Markdown,以后如果学会了回来补充. 标题 #hello一 ...

  2. Java 多线程编程(锁优化)

    转:https://mp.weixin.qq.com/s/lDuguEhuWiLY8ofBRy3tZA 并发环境下进行编程时,需要使用锁机制来同步多线程间的操作,保证共享资源的互斥访问. 加锁会带来性 ...

  3. Python3中转换字符串编码

    在使用subprocess调用Windows命令时,遇到了字符串不显示中文的问题,源码如下:#-*-coding:utf-8-*-__author__ = '$USER' #-*-coding:utf ...

  4. routine的加载

    // Hearthbuddy.Windows.MainWindow // Token: 0x06000245 RID: 581 RVA: 0x0008C318 File Offset: 0x0008A ...

  5. ISO/IEC 9899:2011 条款5——5.1.1 翻译环境

    5.1.1 翻译环境 5.1.1.1程序结构 1.一个C程序不需要一次全被翻译完.程序的文本被保存在本国际标准中被称作为源文件(或预处理文件)的单元里.一个源文件连同所有通过指示符#include所包 ...

  6. Qt编写自定义控件45-柱状标尺控件

    一.前言 这个控件写了很久了,是最早期的一批控件中的一个,和温度计控件类似,都是垂直的进度条,可以设置不同的背景颜色,左侧的刻度也可以自由设定,还提供了动画效果,其实就是开启定时器慢慢的进度到设定的目 ...

  7. jmeter 测试 websocket 接口

    https://www.cnblogs.com/penghaihang/p/7724830.html(请求的亲测ok) https://www.jianshu.com/p/bb8b3e928607 h ...

  8. MapReduce\Tez\Storm\Spark四个框架的异同

    1) MapReduce:是一种离线计算框架,将一个算法抽象成Map和Reduce两个阶段进行 处理,非常适合数据密集型计算. 2) Spark:MapReduce计算框架不适合迭代计算和交互式计算, ...

  9. C#登录SSH执行命令,下载文件

    前言 批量登录SSH执行命令 ,把应急响应中的日志文件下载回来. 代码实现 Renci.SshNet编译出DLL,引用. using System; using System.Collections. ...

  10. GraphQL学习之原理篇

    前言 在上一篇文章基础篇中,我们介绍了GraphQL的语法以及类型系统,算是对GraphQL有个基本的认识.在这一篇中,我们将会介绍GraphQL的实现原理.说到原理,我们就不得不依托于GraphQL ...