C# 并行编程之早起三件事
故事背景
透着纱的窗外的阳光, 又是一个星期一.
慢慢来
一看时间, 还早, 那么蹦跶起来
- 穿衣
- 刷牙
- 洗脸
用代码来说的话, 应该是这样:
// 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# 并行编程之早起三件事的更多相关文章
- 微信小程序:开发之前要知道的三件事
前言 微信之父张小龙在年初的那次演讲中曾表示:"我自己是很多年的程序员,我觉得我们应该为开发的团队做一些事情".几个月后,微信正式推出微信应用号(即微信小程序),在互联网中掀起了又 ...
- <转>离婚前夜悟出的三件事
文/铁眼(简书作者)原文链接:http://www.jianshu.com/p/832be4f659a0?utm_campaign=hugo&utm_medium=reader_share&a ...
- 20170225-第三件事:FR0002测试
第三件事:FR0002测试 MATNR WERKS BERID 800000217 I010 问题,上for all entrys… 1 ...
- day16模块,导入模板完成的三件事,起别名,模块的分类,模块的加载顺序,环境变量,from...import语法导入,from...import *,链式导入,循环导入
复习 ''' 1.生成器中的send方法 -- 给当前停止的yield发生信息 -- 内部调用__next__()取到下一个yield的返回值 2.递归:函数的(直接,间接)自调用 -- 回溯 与 递 ...
- Qt Model/View理解(二)---构造model(细心研读,发现超简单,Model就是做三件事:返回行数量、列数量、data如何显示。然后把model与view联系起来即可,两个例子都是如此)good
数据是一个集合,显示也是一个集合.例如一篇<西游记>的文章,所有的文字就是数据集合,展示方式就是显示的集合,可以以书本的形式,也可以以电纸书的形式,更可以用视频的方式展现. 下面是将一个二 ...
- 关于Business Terminology,你需要了解的三件事
严格意义上来说,商科论文形式的考核,主观因素会有很大的影响.这也是为什么雅思考试中,口语和写作的分数很少有出现满分的原因.除开硬性标准外(如行文逻辑,扣题准确度以及文献资料准确引用等),商科高分论文都 ...
- CC2640R2F&TI-RTOS 拿到 TI CC2640R2F 开发板 第四件事就是 修改第三件事信号量超时改为 事件 超时,并增加 事件控制 ,用于控制LED 闪烁时间或者关闭
/* * data_process.c * * Created on: 2018年7月5日 * Author: admin */ #include "board_led.h" #i ...
- CC2640R2F&TI-RTOS 拿到 TI CC2640R2F 开发板 第三件事就是使用 TI-RTOS 创建 一个任务 和 使用 信号量 超时来闪烁 LED灯
/* * data_process.c * * Created on: 2018年7月5日 * Author: admin */ #include <ti/sysbios/knl/Task.h& ...
- 三、并行编程 - Task同步机制。TreadLocal类、Lock、Interlocked、Synchronization、ConcurrentQueue以及Barrier等
在并行计算中,不可避免的会碰到多个任务共享变量,实例,集合.虽然task自带了两个方法:task.ContinueWith()和Task.Factory.ContinueWhenAll()来实现任务串 ...
随机推荐
- python学习之路(13)
列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, ...
- Hibernate与MyBaits的区别?
(1)Hibernate是全自动,而myBatis是半自动,Hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成SQL.而myBat ...
- C++入门经典-例2.5-使用附加格式说明scanf函数的格式输入
1:代码如下: // 2.5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" int main() { long iLong; /*长整型变 ...
- leetcode-easy-listnode-141 Linked List Cycle
mycode 98.22% # Definition for singly-linked list. # class ListNode(object): # def __init__(self, x ...
- UML学习笔记_01_基本概念
1.什么是UML Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发 ...
- aria-hidden读屏
图标的可访问性现代的辅助技术能够识别并朗读由 CSS 生成的内容和特定的 Unicode 字符.为了避免 屏幕识读设备抓取非故意的和可能产生混淆的输出内容(尤其是当图标纯粹作为装饰用途时),我们为这些 ...
- 创建的项目如果没有src/main/resources文件夹,如何解决?
这是刚创建的一个maven项目,由此可以看见,项目并没有存放配置文件的src/main/resources文件夹? 解决方案: (1)选中项目,右键单击,如图所示选择:Build Path --> ...
- Activity 的 36 大难点,你会几个
前言 学 Android 有一段时间了,一直都只顾着学新的东西,最近发现很多平常用的少的东西竟让都忘了,趁着这两天,打算把有关 Activity 的内容以问题的形式梳理出来,也供大家查缺补漏. 本文中 ...
- linux下mongodb程序和c++客户端的编译
2016-4-6 14:17:15 安装前准备:1/ 安装boost库2/ 安装scons程序 方法一:$ git clone git://github.com/mongodb/mongo ...
- 英特尔® Open Image Denoise 库有助于节省时间,提高质量
在使用光线跟踪增强真实性与沉浸感时,游戏开发人员面临复杂的权衡.为了克服一系列挑战,英特尔创建了使用光线跟踪进行图像渲染的一整套解决方案,包含高性能开源滤波器.该解决方案已发布测试版,被集成至 Uni ...