C#怎么使用Task实现并行编程

2023-06-14 08:24:43 task 并行 编程

这篇文章主要介绍了C#怎么使用Task实现并行编程的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#怎么使用Task实现并行编程文章都会有所收获,下面我们一起来看看吧。

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

// 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 秒.

相关文章