故事背景

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

慢慢来

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

  • 穿衣
  • 刷牙
  • 洗脸

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

  1. // Program.cs
  2. using System;
  3. using System.Diagnostics;
  4. using System.Threading;
  5. namespace ConsoleApp1
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. Console.WriteLine("早起三件事开始...");
  12. Stopwatch sw = new Stopwatch();
  13. sw.Start();
  14. Dress();
  15. BrushTeeth();
  16. WashFace();
  17. sw.Stop();
  18. Console.WriteLine($"...早起三件事完成, 总耗时 {sw.Elapsed.Seconds} 秒");
  19. Console.ReadKey();
  20. }
  21. /// <summary>
  22. /// 穿衣
  23. /// </summary>
  24. static void Dress()
  25. {
  26. Console.WriteLine($"穿衣开始...");
  27. Stopwatch sw = new Stopwatch();
  28. sw.Start();
  29. Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 1));
  30. sw.Stop();
  31. Console.WriteLine($"...穿衣完成, 耗时 {sw.Elapsed.Seconds} 秒");
  32. }
  33. /// <summary>
  34. /// 刷牙
  35. /// </summary>
  36. static void BrushTeeth()
  37. {
  38. Console.WriteLine($"刷牙开始...");
  39. Stopwatch sw = new Stopwatch();
  40. sw.Start();
  41. Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 3));
  42. sw.Stop();
  43. Console.WriteLine($"...刷牙完成, 耗时 {sw.Elapsed.Seconds} 秒");
  44. }
  45. /// <summary>
  46. /// 洗脸
  47. /// </summary>
  48. static void WashFace()
  49. {
  50. Console.WriteLine($"洗脸开始...");
  51. Stopwatch sw = new Stopwatch();
  52. sw.Start();
  53. Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 5));
  54. sw.Stop();
  55. Console.WriteLine($"...系列完成, 耗时 {sw.Elapsed.Seconds} 秒");
  56. }
  57. }
  58. }

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

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

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

赶时间

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

总而言之代码是这样滴:

  1. // Program.cs
  2. using System;
  3. using System.Diagnostics;
  4. using System.Threading;
  5. using System.Threading.Tasks;
  6. namespace ConsoleApp1
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. Console.WriteLine("早起三件事开始...");
  13. Stopwatch sw = new Stopwatch();
  14. sw.Start();
  15. Task dressTask = Task.Factory.StartNew(action: Dress);
  16. Task brushTeethTask = Task.Factory.StartNew(action: BrushTeeth);
  17. Task washFaceTask = Task.Factory.StartNew(action: WashFace);
  18. Task.WaitAll(dressTask, brushTeethTask, washFaceTask);
  19. sw.Stop();
  20. Console.WriteLine($"...早起三件事完成, 总耗时 {sw.Elapsed.Seconds} 秒");
  21. Console.ReadKey();
  22. }
  23. /// <summary>
  24. /// 穿衣
  25. /// </summary>
  26. static void Dress()
  27. {
  28. Console.WriteLine($"穿衣开始...");
  29. Stopwatch sw = new Stopwatch();
  30. sw.Start();
  31. Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 1));
  32. sw.Stop();
  33. Console.WriteLine($"...穿衣完成, 耗时 {sw.Elapsed.Seconds} 秒");
  34. }
  35. /// <summary>
  36. /// 刷牙
  37. /// </summary>
  38. static void BrushTeeth()
  39. {
  40. Console.WriteLine($"刷牙开始...");
  41. Stopwatch sw = new Stopwatch();
  42. sw.Start();
  43. Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 3));
  44. sw.Stop();
  45. Console.WriteLine($"...刷牙完成, 耗时 {sw.Elapsed.Seconds} 秒");
  46. }
  47. /// <summary>
  48. /// 洗脸
  49. /// </summary>
  50. static void WashFace()
  51. {
  52. Console.WriteLine($"洗脸开始...");
  53. Stopwatch sw = new Stopwatch();
  54. sw.Start();
  55. Thread.Sleep(timeout: TimeSpan.FromSeconds(value: 5));
  56. sw.Stop();
  57. Console.WriteLine($"...系列完成, 耗时 {sw.Elapsed.Seconds} 秒");
  58. }
  59. }
  60. }

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

  1. 早起三件事开始...
  2. 刷牙开始...
  3. 洗脸开始...
  4. 穿衣开始...
  5. ...穿衣完成, 耗时 1
  6. ...刷牙完成, 耗时 3
  7. ...系列完成, 耗时 5
  8. ...早起三件事完成, 总耗时 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. python学习之路(13)

    列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, ...

  2. Hibernate与MyBaits的区别?

    (1)Hibernate是全自动,而myBatis是半自动,Hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成SQL.而myBat ...

  3. C++入门经典-例2.5-使用附加格式说明scanf函数的格式输入

    1:代码如下: // 2.5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" int main() { long iLong; /*长整型变 ...

  4. leetcode-easy-listnode-141 Linked List Cycle

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

  5. UML学习笔记_01_基本概念

    1.什么是UML Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发 ...

  6. aria-hidden读屏

    图标的可访问性现代的辅助技术能够识别并朗读由 CSS 生成的内容和特定的 Unicode 字符.为了避免 屏幕识读设备抓取非故意的和可能产生混淆的输出内容(尤其是当图标纯粹作为装饰用途时),我们为这些 ...

  7. 创建的项目如果没有src/main/resources文件夹,如何解决?

    这是刚创建的一个maven项目,由此可以看见,项目并没有存放配置文件的src/main/resources文件夹? 解决方案: (1)选中项目,右键单击,如图所示选择:Build Path --> ...

  8. Activity 的 36 大难点,你会几个

    前言 学 Android 有一段时间了,一直都只顾着学新的东西,最近发现很多平常用的少的东西竟让都忘了,趁着这两天,打算把有关 Activity 的内容以问题的形式梳理出来,也供大家查缺补漏. 本文中 ...

  9. linux下mongodb程序和c++客户端的编译

    2016-4-6     14:17:15   安装前准备:1/ 安装boost库2/ 安装scons程序 方法一:$ git clone git://github.com/mongodb/mongo ...

  10. 英特尔® Open Image Denoise 库有助于节省时间,提高质量

    在使用光线跟踪增强真实性与沉浸感时,游戏开发人员面临复杂的权衡.为了克服一系列挑战,英特尔创建了使用光线跟踪进行图像渲染的一整套解决方案,包含高性能开源滤波器.该解决方案已发布测试版,被集成至 Uni ...