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 来轻松实现并行操作.
    • ...
  • 相关阅读:
    删除链表的倒数第N个节点
    SVN快速入门(TSVN)
    C# HttpWebRequest提交数据方式浅析
    简单的3个SQL视图搞定所有SqlServer数据库字典
    简单统计SQLSERVER用户数据表大小(包括记录总数和空间占用情况)
    详细讲解Android对自己的应用代码进行混淆加密防止反编译
    PHP之网络编程
    PHP之ThinkPHP模板标签操作
    PHP之ThinkPHP数据操作CURD
    关于数组的取极值和排序
  • 原文地址:https://www.cnblogs.com/taadis/p/11112929.html
Copyright © 2011-2022 走看看