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()来实现任务串 ...
随机推荐
- AcWing 107. 超快速排序(归并排序 + 逆序对 or 树状数组)
在这个问题中,您必须分析特定的排序算法----超快速排序. 该算法通过交换两个相邻的序列元素来处理n个不同整数的序列,直到序列按升序排序. 对于输入序列9 1 0 5 4,超快速排序生成输出0 1 4 ...
- 前后端分离,get请求导出
[HttpGet] public HttpResponseMessage Export(string obj) { string eventType = string.Empty; string ex ...
- echarts之bootstrap选项卡不能显示其他标签echarts图表
在echarts跟bootstrap选项卡整合的时候,默认第一个选中选项卡可以正常加载echarts图表,但是切换其他选项的时候不能渲染出其他选项卡echarts图表. 解决方法: 在js中添加代码: ...
- webpack3升级webpack4
cnpm i webpck@4 webpack-cli -D cnpm i webpack-cli -D cnpm update npm WARN deprecated extract-text-we ...
- kotlin实现流读取
在Java对流的读取是下面的那样,当前不要忘记流的关闭close. // java 代码void someFunc(InputStream in, OutputStream out) throws I ...
- 链表栈C语言实现
#ifndef LINKSTACK_H_INCLUDED #define LINKSTACK_H_INCLUDED #include <stdlib.h> #include <std ...
- TCP定时器 之 连接建立定时器
当服务器收到新的syn请求,会回复syn+ack给请求端,若某时间内未收到请求端回复的ack,新建连接定时器超时执行回调,重传syn+ack,当超时超过固定次数时,该连接中止:本文主要分析其初始化流程 ...
- 全排列函数next_permutation(a,a+n)
#include<iostream> #include<algorithm> using namespace std; int main(){ ]; int n; cin> ...
- Arrays类与Collections类
java.util.Arrays类包含一个静态的工厂,允许数组被视为列表.以下是关于数组的要点: 这个类包含了各种方法来操作数组(比如排序和搜索). 在这个类中的方法抛出NullPointerExce ...
- 国际标准 ISO 15008
Road vehicles — Ergonomic aspects of transport information and control systems — Specifications and ...