写点什么

C#实现多线程的几种方式

作者:追逐时光者
  • 2025-10-29
    广东
  • 本文字数:2373 字

    阅读完需:约 8 分钟

前言

多线程是 C#中一个重要的概念,多线程指的是在同一进程中同时运行多个线程的机制。多线程适用于需要提高系统并发性、吞吐量和响应速度的场景,可以充分利用多核处理器和系统资源,提高应用程序的性能和效率。

多线程常用场景

  • CPU 密集型任务.

  • I/O 密集型任务.

  • 并发请求处理.

  • 大数据处理等.

什么是进程?

进程(Process)是计算机中的一个执行中的程序,它是对正在运行的程序的抽象。一个进程包括了程序的代码、数据、堆栈以及其他操作系统所需的资源。

什么是线程?

线程(Thread)是进程中的一个执行单元,一个进程可以包含多个线程,它们共享进程的资源,但拥有独立的执行流程。

使用 Thread 类

        public static void ThreadMethod()        {            var newThread = new Thread(WorkerMethod);            newThread.Start();
            for (int i = 0; i < 8; i++)            {                Console.WriteLine($"ThreadMethod 主线程开始工作:{i}");                Thread.Sleep(100);            }        }                private static void WorkerMethod()        {            for (int i = 0; i < 8; i++)            {                Console.WriteLine($"WorkerMethod 辅助线程开始工作:{i}");                Thread.Sleep(100);            }        }
复制代码


使用 ThreadPool 类

        public static void ThreadPoolMethod()        {            ThreadPool.QueueUserWorkItem(o => WorkerMethod());
            for (int i = 0; i < 8; i++)            {                Console.WriteLine($"ThreadPoolMethod 主线程开始工作:{i}");                Thread.Sleep(100);            }        }                private static void WorkerMethod()        {            for (int i = 0; i < 8; i++)            {                Console.WriteLine($"WorkerMethod 辅助线程开始工作:{i}");                Thread.Sleep(100);            }        }
复制代码


使用 Task 类

        public static void TaskMethod()        {            Task.Run(() => WorkerMethod());
            for (int i = 0; i < 8; i++)            {                Console.WriteLine($"TaskMethod 主线程开始工作:{i}");                Task.Delay(100).Wait();            }        }                private static void WorkerMethod()        {            for (int i = 0; i < 8; i++)            {                Console.WriteLine($"WorkerMethod 辅助线程开始工作:{i}");                Thread.Sleep(100);            }        }
复制代码


使用 Parallel 类

        public static void ParallelMethod()        {            Parallel.Invoke(WorkerMethod, WorkerMethodOther1, WorkerMethodOther2);        }                private static void WorkerMethod()        {            for (int i = 0; i < 8; i++)            {                Console.WriteLine($"WorkerMethod 辅助线程开始工作:{i}");                Thread.Sleep(100);            }        }
        private static void WorkerMethodOther1()        {            for (int i = 0; i < 8; i++)            {                Console.WriteLine($"WorkerMethodOther1 辅助线程开始工作:{i}");                Thread.Sleep(100);            }        }
        private static void WorkerMethodOther2()        {            for (int i = 0; i < 8; i++)            {                Console.WriteLine($"WorkerMethodOther2 辅助线程开始工作:{i}");                Thread.Sleep(100);            }        }
复制代码


拾遗补漏合集

在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core 拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。

GitHub 开源地址

https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetStudy.md

拾遗补漏知识点投稿

该 Issues 主要是给各位小伙伴们提供投稿的地方,你有什么想要学习的 C#/.NET/.NET Core 相关技术栈或者已学习过且有文章输出的欢迎在投稿!

https://github.com/YSGStudyHards/DotNetGuide/issues/37

发布于: 刚刚阅读数: 2
用户头像

不积跬步无以至千里,不积小流无以成江海! 2020-01-14 加入

微软MVP、华为云HCDE、华为云云享专家、51CTO专家博主、阿里云专家博主、博客园推荐博客、CSDN博客专家、腾讯云创作之星、掘金优秀创作者,一个热爱开源的全栈软件工程师,擅长C#、.NET、Vue等相关技术开发。

评论

发布
暂无评论
C#实现多线程的几种方式_C#_追逐时光者_InfoQ写作社区