在微软的.NET Framework中,任务是通过System.Threading.Tasks命令空间中的Task类来实现的。它的静态属性Task.Factory是TaskFactory类的一个实例,它被用来创建和调度新任务。

调度是并行任务的一个重要方面。新任务并不一定会像线程那样直接开始运行,而是被放在一个工作队列里面。

示例代码

有两个方法,DoLeft()

 public static void DoLeft()
{
Thread.Sleep();
Console.WriteLine(string.Concat(DateTime.Now.ToLongTimeString(), " DoLeft is running!"));
}

和DoRight()

 public static void DoRight()
{
Thread.Sleep();
Console.WriteLine(string.Concat(DateTime.Now.ToLongTimeString(), " DoRight is running!"));
}

我们来并行的执行这两个任务。

• Parallel.Invoke方式

 static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start(); Parallel.Invoke(DoLeft, DoRight); sw.Stop();
Console.WriteLine(string.Format("共计耗时{0}秒", sw.Elapsed.TotalSeconds)); Console.Read();
}

运行结果为:

运行结果表明Parallel.Invoke方法创建了新任务并等待它们完成。

• Task.Factory.StartNew方法

调用方法变更为:

 static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start(); var task1 = Task.Factory.StartNew(DoLeft); //StartNew, 创建并启动System.Threading.Tasks.Task
var task2 = Task.Factory.StartNew(DoRight); sw.Stop();
Console.WriteLine(string.Format("共计耗时{0}秒", sw.Elapsed.TotalSeconds)); Console.Read();
}

运行结果:

从结果可以得出,TaskFactory类的StartNew方法会创建并调度一个新任务,并不等待任务执行完成。添加Task.WaitAll来等待所有并行任务执行完成。

 Task.WaitAll(task1, task2);

可以看出其是在等待tasks全部执行完成。

.Net并行编程 - 并行任务基础知识的更多相关文章

  1. C#复习笔记(5)--C#5:简化的异步编程(异步编程的基础知识)

    异步编程的基础知识 C#5推出的async和await关键字使异步编程从表面上来说变得简单了许多,我们只需要了解不多的知识就可以编写出有效的异步代码. 在介绍async和await之前,先介绍一些基础 ...

  2. python六十七课——网络编程(基础知识了解)

    网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...

  3. java第九节 网络编程的基础知识

    /** * * 网络编程的基础知识 * 网络协议与TCP/IP * IP地址和Port(端口号) * 本地回路的IP地址:127.0.0.1 * 端口号的范围为0-65535之间,0-1023之间的端 ...

  4. 编程必备基础知识|计算机组成原理篇(09):CPU的控制器和运算器

    计算机基础方面的知识,对于一些非科班出身的同学来讲,一直是他们心中的痛,而对于科班出身的同学,很多同学在工作之后,也意识到自身所学知识的不足与欠缺,想回头补补基础知识.关于计算机基础的课程很多,内容繁 ...

  5. [源码解析] PyTorch 流水线并行实现 (1)--基础知识

    [源码解析] PyTorch 流水线并行实现 (1)--基础知识 目录 [源码解析] PyTorch 流水线并行实现 (1)--基础知识 0x00 摘要 0x01 历史 1.1 GPipe 1.2 t ...

  6. 并行编程OpenMP基础及简单示例

    OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...

  7. [转] linux操作系统下c语言编程入门--基础知识

    点击阅读原文 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 1. 源程序编译        2. Makefile的编写        3. 程序库 ...

  8. 01网络编程(基础知识+OSI七层协议+TCP与UDP)

    目录 01 网络编程 一.软件开发架构 1.1 CS架构 1.2 BS架构 二.网络理论前戏 2.1 简介 2.2 常见硬件 三.OSI七层协议(五层) 3.1 七层协议 3.2 五层协议 3.3 知 ...

  9. WIN64内核编程-的基础知识

    WIN64内核编程基础班(作者:胡文亮)   https://www.dbgpro.com/x64driver 我们先从一份"简历"说起: 姓名:X86或80x86 性别:? 出生 ...

随机推荐

  1. Oracle记录类型(record)和%rowtype

    Oracle中的记录类型(record)和使用%rowtype定义的数据类型都是一种单行多列的数据结构,可以理解为一个具有多个属性的对象.其中属性名即为列名. 记录类型(record) 记录类型是一种 ...

  2. MySQL 5.7修改root密码的4种方法

            sometimes we will forget our password of root in MySQL DB server.so,there're several methods ...

  3. sql查询关于时间的一些汇总

    今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0 昨天的所有数据:select * from 表名 where ...

  4. 六个比较好用的php数组Array函数

    1. array_column 返回输入数组中某个单一列的值.2. array_filter 用回调函数过滤数组中的元素.3. array_map 将用户自定义函数作用到给定数组的每个值上,返回新的值 ...

  5. composer切换中国镜像

    替换 composer.lock 文件中的 https://files.phpcomposer.com/files/ 为 https://dl.laravel-china.org 命令行 compos ...

  6. MYSQL小函数大用途之-------FIND_IN_SET

    没有前言和解释,直接看怎么用 当前我所知道两种用法: 第一种:和like的作用有点相似,但用这个函数会比like更准确的查到你想要的数据. 前提是当前的字段满足俩个要求: 类型为字符型. 储存格式为- ...

  7. [转]关于sdk更新Android SDK Tools 25.3.1版本后使用sdk manager闪退

    昨天这两个manager还工作正常,今天更新了一下,发现不可用了,运行avd manager和sdk manager没反应,搜了好多文章,然后看到了下这篇文章<关于sdk更新Android SD ...

  8. postgresql 数据库schema 复制

    ------ --- 导出 pg_dump -h *.*.*.* -p 5432 -d you_databasename -n you_schema -f you_sqlfile.sql ---- 替 ...

  9. cc2541测试SimpleBLEPeripheral例程

    1. 修改工程选项,去掉CC2540_MINIDK,烧写CC2541代码 2. 打开手机软件TruthBlue2_7 3. 准备看下特征值4的通信,在周期处理里面,一直读取特征值3的值,然后由特征值4 ...

  10. hdu1789 Doing Homework again(贪心+排序)

    Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...