首页 > 编程语言 >C#实现多线程的几种方式

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

时间:2024-05-11 09:02:15浏览次数:19  
标签:Console Thread C# void WorkerMethod 几种 static 100 多线程

前言

多线程是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

DotNetGuide技术社区交流群

  • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
  • 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。

欢迎加入DotNetGuide技术社区微信交流群

标签:Console,Thread,C#,void,WorkerMethod,几种,static,100,多线程
From: https://www.cnblogs.com/Can-daydayup/p/18185545

相关文章

  • AutoCAD中一个隐藏的系统变量——GFXDX12,解决硬件加速相关问题
    其实AutoDesk是知道这个问题的,也给出了一个系统变量,也就是:GFXDX12。不过这个系统变量在系统变量列表中是没有列出来的,但在帮助中可以搜索到。GFXDX12的默认值为1,查看帮助文件,大概的意思是,GFXDX12为1时,AutoCAD直接使用系统的硬件特性,主要是DirectX。如果出现卡顿或鼠标拖尾等现象,就......
  • Failed to open libcc.dll
      [-].\Navicat-Cracker\NavicatCrackerDlg.cpp:300->  Failedtoopenlibcc.dll  拒绝访问。 (0x5) 解决方法:以管理员身份运行exe文件。 Navicatpremium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到My......
  • Dawn Launcher Windows快捷启动工具 Maye是一款体积小巧、简单易用的快速启动工具 Luc
    DawnLauncherWindows快捷启动工具,帮助您整理杂乱无章的桌面,分门别类管理您的桌面快捷方式,让您的桌面保持干净整洁。支持关联文件夹(实时同步文件夹内容)、快速搜索、相对路径(便携路径)、扫描本机开始菜单、本地扫描本机Appx应用列表、添加网址并一键获取网址信息。Maye是一......
  • C#.Net筑基-运算符Family
    C#运算符内置了丰富的运算符操作类型,使用方便,极大的简化了编码,同时还支持多种运算符重载机制,让自定义的类型也能支持运算符行为。01、运算符概览运算符分类描述数学运算基础的加减乘除,及++、--赋值运算=,及各种复合赋值op=,x+=20;等效于x=x+20;比较运算比较......
  • 从零手写实现 tomcat-09-servlet 处理类
    创作缘由平时使用tomcat等web服务器不可谓不多,但是一直一知半解。于是想着自己实现一个简单版本,学习一下tomcat的精髓。系列教程从零手写实现apacheTomcat-01-入门介绍从零手写实现apacheTomcat-02-web.xml入门详细介绍从零手写实现tomcat-03-基本的socket实......
  • Cursor 光标
    系统光标资源名称APPSTARTING   标准的箭头和小沙漏ARROW         标准的箭头CROSS         十字光标HELP          标准的箭头和问号IBEAM         工字光标NO            禁止圈SIZEALL       四向箭头指向......
  • 关于Karush-Kuhn-Tucker(KKT)条件的分析
    KKT条件约束优化中非常关键的条件,与算法的设计与收敛性分析息息相关。1.拉格朗日乘子我们以简单的一类问题做为讨论KKT条件的序言。一般来说,任何有\(n\)个元素的变量\(x=(x_{1},\ldots,x_{n})^{T}\)和\(m\)个等式约束的优化问题可以写成\[\min_{x\in\mathbb{R}^{n}}\quadf(x......
  • IfcStateEnum
    IfcStateEnum类型定义IfcStateEnum枚举标识对象的状态或可访问性(例如,读/写、锁定)。有效的枚举为:IFC2.0中的新枚举。IFC2x3这个概念最初在IFC2.0中被引入为类型为BINARY(3)FIXED的IfcModifiedFlag,并在R2x3中被修改为枚举。它最初是作为为部分模型交换提供便利的第一步引入的,主要用......
  • 第 3 篇 Scrum 冲刺博客
    每天举行站立式会议昨天已完成的工作:今天计划完成的工作:工作中遇到的困难:项目燃尽图代码/文档签入记录项目展示每日每人总结李健宇:明天加油。陈彦煤:尽力完成,克服困难。......
  • 第 2 篇 Scrum 冲刺博客
    每天举行站立式会议昨天已完成的工作:完成部分框架今天计划完成的工作:进一步完成基本框架工作中遇到的困难:知识层面存在困难,需要进一步学习项目燃尽图代码/文档签入记录无项目展示无每日每人总结李健宇:明天继续努力。陈彦煤:加油。......