C#使用Task实现并行编程

2022-08-27 17:50:36

故事背景

透着纱的窗外的阳光,>

慢慢来

一看时间,>

    穿衣刷牙洗脸

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

    // 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 来轻松实现并行操作....

      以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对易采站长站的支持。如果你想了解更多相关内容请查看下面相关链接