故事背景

透着纱的窗外的阳光, 又是一个星期一.

慢慢来

一看时间, 还早, 那么蹦跶起来

  • 穿衣
  • 刷牙
  • 洗脸

用代码来说的话, 应该是这样:

// Program.cs
using System;
using System.Diagnostics;
using System.Threading; namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("早起三件事开始...");
Stopwatch sw = new Stopwatch();
sw.Start();
Dress();
BrushTeeth();
WashFace();
sw.Stop();
Console.WriteLine($"...早起三件事完成, 总耗时 {sw.Elapsed.Seconds} 秒");
Console.ReadKey();
} /// <summary>
/// 穿衣
/// </summary>
static void Dress()
{
Console.WriteLine($"穿衣开始...");
Stopwatch sw = new Stopwatch();
sw.Start();
Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 1));
sw.Stop();
Console.WriteLine($"...穿衣完成, 耗时 {sw.Elapsed.Seconds} 秒");
} /// <summary>
/// 刷牙
/// </summary>
static void BrushTeeth()
{
Console.WriteLine($"刷牙开始...");
Stopwatch sw = new Stopwatch();
sw.Start();
Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 3));
sw.Stop();
Console.WriteLine($"...刷牙完成, 耗时 {sw.Elapsed.Seconds} 秒");
} /// <summary>
/// 洗脸
/// </summary>
static void WashFace()
{
Console.WriteLine($"洗脸开始...");
Stopwatch sw = new Stopwatch();
sw.Start();
Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 5));
sw.Stop();
Console.WriteLine($"...系列完成, 耗时 {sw.Elapsed.Seconds} 秒");
}
}
}

运行之后, 等待一会, 会看到如下输出:

早起三件事开始...
穿衣开始...
...穿衣完成, 耗时 1 秒
刷牙开始...
...刷牙完成, 耗时 3 秒
洗脸开始...
...系列完成, 耗时 5 秒
...早起三件事完成, 总耗时 9 秒

一件一件事慢慢来, 总耗时 9 秒...

赶时间

一看时间, 哎呦我去, 快迟到了, 穿衣 & 刷牙 & 洗脸一起来吧...别问我现实中怎么实现的

总而言之代码是这样滴:

// Program.cs
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks; namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("早起三件事开始...");
Stopwatch sw = new Stopwatch();
sw.Start();
Task dressTask = Task.Factory.StartNew(action: Dress);
Task brushTeethTask = Task.Factory.StartNew(action: BrushTeeth);
Task washFaceTask = Task.Factory.StartNew(action: WashFace);
Task.WaitAll(dressTask, brushTeethTask, washFaceTask);
sw.Stop();
Console.WriteLine($"...早起三件事完成, 总耗时 {sw.Elapsed.Seconds} 秒");
Console.ReadKey();
} /// <summary>
/// 穿衣
/// </summary>
static void Dress()
{
Console.WriteLine($"穿衣开始...");
Stopwatch sw = new Stopwatch();
sw.Start();
Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 1));
sw.Stop();
Console.WriteLine($"...穿衣完成, 耗时 {sw.Elapsed.Seconds} 秒");
} /// <summary>
/// 刷牙
/// </summary>
static void BrushTeeth()
{
Console.WriteLine($"刷牙开始...");
Stopwatch sw = new Stopwatch();
sw.Start();
Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 3));
sw.Stop();
Console.WriteLine($"...刷牙完成, 耗时 {sw.Elapsed.Seconds} 秒");
} /// <summary>
/// 洗脸
/// </summary>
static void WashFace()
{
Console.WriteLine($"洗脸开始...");
Stopwatch sw = new Stopwatch();
sw.Start();
Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 5));
sw.Stop();
Console.WriteLine($"...系列完成, 耗时 {sw.Elapsed.Seconds} 秒");
}
}
}

启动运行之后, 等待一会, 你应该会看到如下输出:

早起三件事开始...
刷牙开始...
洗脸开始...
穿衣开始...
...穿衣完成, 耗时 1 秒
...刷牙完成, 耗时 3 秒
...系列完成, 耗时 5 秒
...早起三件事完成, 总耗时 5 秒

可以看到, 几件事一起干了, 总耗时只用了 5 秒.

总结一下

几件事一起干(并行), 比一件一件事慢慢来

  • 要省时间, 但是要多写点代码, 更耗体力.
  • 可以使用 Task 来轻松实现并行操作.
  • ...

C# 并行编程之早起三件事的更多相关文章

  1. 微信小程序:开发之前要知道的三件事

    前言 微信之父张小龙在年初的那次演讲中曾表示:"我自己是很多年的程序员,我觉得我们应该为开发的团队做一些事情".几个月后,微信正式推出微信应用号(即微信小程序),在互联网中掀起了又 ...

  2. <转>离婚前夜悟出的三件事

    文/铁眼(简书作者)原文链接:http://www.jianshu.com/p/832be4f659a0?utm_campaign=hugo&utm_medium=reader_share&a ...

  3. 20170225-第三件事:FR0002测试

    第三件事:FR0002测试             MATNR WERKS BERID 800000217 I010               问题,上for all entrys…       1 ...

  4. day16模块,导入模板完成的三件事,起别名,模块的分类,模块的加载顺序,环境变量,from...import语法导入,from...import *,链式导入,循环导入

    复习 ''' 1.生成器中的send方法 -- 给当前停止的yield发生信息 -- 内部调用__next__()取到下一个yield的返回值 2.递归:函数的(直接,间接)自调用 -- 回溯 与 递 ...

  5. Qt Model/View理解(二)---构造model(细心研读,发现超简单,Model就是做三件事:返回行数量、列数量、data如何显示。然后把model与view联系起来即可,两个例子都是如此)good

    数据是一个集合,显示也是一个集合.例如一篇<西游记>的文章,所有的文字就是数据集合,展示方式就是显示的集合,可以以书本的形式,也可以以电纸书的形式,更可以用视频的方式展现. 下面是将一个二 ...

  6. 关于Business Terminology,你需要了解的三件事

    严格意义上来说,商科论文形式的考核,主观因素会有很大的影响.这也是为什么雅思考试中,口语和写作的分数很少有出现满分的原因.除开硬性标准外(如行文逻辑,扣题准确度以及文献资料准确引用等),商科高分论文都 ...

  7. CC2640R2F&TI-RTOS 拿到 TI CC2640R2F 开发板 第四件事就是 修改第三件事信号量超时改为 事件 超时,并增加 事件控制 ,用于控制LED 闪烁时间或者关闭

    /* * data_process.c * * Created on: 2018年7月5日 * Author: admin */ #include "board_led.h" #i ...

  8. CC2640R2F&TI-RTOS 拿到 TI CC2640R2F 开发板 第三件事就是使用 TI-RTOS 创建 一个任务 和 使用 信号量 超时来闪烁 LED灯

    /* * data_process.c * * Created on: 2018年7月5日 * Author: admin */ #include <ti/sysbios/knl/Task.h& ...

  9. 三、并行编程 - Task同步机制。TreadLocal类、Lock、Interlocked、Synchronization、ConcurrentQueue以及Barrier等

    在并行计算中,不可避免的会碰到多个任务共享变量,实例,集合.虽然task自带了两个方法:task.ContinueWith()和Task.Factory.ContinueWhenAll()来实现任务串 ...

随机推荐

  1. ltelliJ IDEA 创建Maven web项目无src目录的解决方案

    https://blog.csdn.net/xiaoke815/article/details/72810976 一.缘由 这几天闲来无事,突然想试试IDEA这个编译器,之前一直都在用Eclipse ...

  2. extentsreport testng美化报告生成

    一:主要内容 优化testng测试报告,使用extentsreport 解决extentsreport打开后加载不出来样式的问题 二:报告效果 先上图,看下testng extentsreport报告 ...

  3. ubuntu下mysql数据库存储路径修改

    一.安装mysql ubuntu系统安装配置APT源,apt install mysql-server mysql-client 二.查看安装端口情况 sudo netstat -tap | grep ...

  4. leetcode-easy-listnode-234 Palindrome Linked List

    mycode   89.42% # Definition for singly-linked list. # class ListNode(object): # def __init__(self, ...

  5. python - jpype模块,python调用java的接口

    转载自: http://www.cnblogs.com/junrong624/p/5278457.html https://www.cnblogs.com/fanghao/p/7745356.html ...

  6. Android 中布局的优化措施都有哪些?

    1.尽可能减少布局的嵌套层级可以使用 sdk 提供的 hierarchyviewer 工具分析视图树,帮助我们发现没有用到的布局.2.不用设置不必要的背景,避免过度绘制比如父控件设置了背景色,子控件完 ...

  7. Linux常用命令touch/grep/mkdir/rm/cat/find/cp/mv/tar/gzip等

    Unix-->Linux(Ubuntu,Redhat,suse,fedora) 1. cd - :回到上次执行的那个目录(相当于“回看”的功能) 2. touch :创建一个文件,可以是任意后缀 ...

  8. Dart学习笔记-运算符-条件表达式-类型转换

    Dart学习笔记-运算符-条件表达式-类型转换 一.运算符 1.算术运算符 + (加)- (减)* (乘)/ (除)~/ (取整) %(取余) 2.关系运算符 == (等等) != (不等) > ...

  9. CTF—攻防练习之SMB私钥泄露

    攻击机:192.168.32.152 靶机 :192.168.32.155 打开靶机 nmap一下 我们看到了开放了 ssh,smb,mysql这些端口,还有一个大端口 对smb服务我们可以1.使用空 ...

  10. 【HANA系列】SAP ECLIPSE中创建ABAP项目失败原因解析

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP ECLIPSE中创建AB ...