zoukankan      html  css  js  c++  java
  • 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 来轻松实现并行操作.
    • ...
  • 相关阅读:
    【Maven】安装配置、目录结构、配置文件、常见命令
    【Maven】基础概念、仓库、构建与部属
    【float】与【position】汇总
    【CSS】定义元素的对齐方式
    【CSS】元素样式
    【CSS】绝对定位和相对定位
    网页常见布局
    php--常用的时间处理函数
    16位cpu下主引导扇区及用户程序的编写
    浅谈pageobject模式
  • 原文地址:https://www.cnblogs.com/taadis/p/11112929.html
Copyright © 2011-2022 走看看