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

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

时间:2024-05-11 17:23:18浏览次数:23  
标签: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/mq0036/p/18186826

相关文章

  • 利用pycharm对分布式命令的设备进行debug(Vision mamba)
    背景介绍接着上次的visionmamba初步跑通,想进一步了解内部代码运行的过程,模型的工作机理,因此打算利用pycharm进行断点调试(即debug),花了半天时间终于学会了如何将控制台命令的形式传入pycharm中进行传参。在此,感谢大佬的博客,这里只是具体结合本机安装wsl2对大佬的博客进行......
  • 困扰了一天的flask结合智谱ai langchain流式输出json问题终于解决了
    本次对接的大模型是智谱,首先想到去智谱开放平台找找有没有和langchain结合的文档: 结果还真有,就省去了谷歌的时间,但是智谱的文档只提供了非流式的示例代码,想着先拷过来跑一下再说,结果就是非流式是正常输出的,流式就遇到问题了,不管我咋配置,好像只能在控制台输出流失内容,遂去谷歌......
  • 云效 Pipeline as Code 来了!这些场景,用好它效率翻倍!
    从可视化编排到支持YAML编排云效流水线Flow是开箱即用的企业级持续集成和持续交付工具,支持丰富的代码源、构建、自动化测试工具、多种部署类型和部署方式,与阿里云深度集成,还提供多种企业级特性,助力企业高效完成从开发到上线CICD过程。在业界,流水线产品通常有2种使用方式......
  • 云效 Pipeline as Code 来了!这些场景,用好它效率翻倍!
    从可视化编排到支持YAML编排云效流水线Flow是开箱即用的企业级持续集成和持续交付工具,支持丰富的代码源、构建、自动化测试工具、多种部署类型和部署方式,与阿里云深度集成,还提供多种企业级特性,助力企业高效完成从开发到上线CICD过程。在业界,流水线产品通常有2种使用方式......
  • 在 WPF 中集成 ASP.NET Core 和 WebView2 用于集成 SPA 应用
    背景我们有些工具在Web版中已经有了很好的实践,而在WPF中重新开发也是一种费时费力的操作,那么直接集成则是最省事省力的方法了。修改项目文件我们首先修改项目文件,让WPF项目可以包含ASP.NETCore的库,以及引用WebView2控件。<ProjectSdk="Microsoft.NET.Sdk"><Pr......
  • 这些标识代表了WindowsServer2022SERVERDATACENTER 的不同版本和配置选项。让我逐一解
    这些标识代表了WindowsServer2022的不同版本和配置选项。让我逐一解释它们:WindowsServer2022SERVERSTANDARDCORE:这表示WindowsServer2022的标准版核心安装。它是一个精简的安装版本,只包含基本的操作系统组件和服务,没有图形用户界面。通常用于服务器部署,以减少资......
  • ..\HAL_LIB\Inc\stm32l4xx_hal_rcc_ex.h(2424): error: #20: identifier "HAL_Sta
    stm32工程编译时遇到这个错误,显示HAL_StatusTypeDef没有被定义,但是go todefinition又能找到定义 后来在网上寻找解决办法,结果发现竟然是#include"stm32l4xx_hal_spi.h"#include"stm32l4xx_hal.h"这两个的顺序问题,#include"stm32l4xx_hal.h"头文件包含必须在最前面,真是......
  • 使用c#强大的表达式树实现对象的深克隆
    一、表达式树的基本概念表达式树是一个以树状结构表示的表达式,其中每个节点都代表表达式的一部分。例如,一个算术表达式a+b可以被表示为一个树,其中根节点是加法运算符,它的两个子节点分别是a和b。在LINQ(语言集成查询)中,表达式树使得能够将C#中的查询转换成其他形式的查询,......
  • Codeforces 832E Vasya and Shifts
    考虑到这个操作实际上就是\(5\)进制的不进位加法,其实也就是\(5\)进制下的异或。同时因为是\(5\)进制,对于\(x\in[1,4]\),\(x\times0,\cdots,x\times4\)刚好可以表示出\(0\sim4\)。于是可以考虑类似\(2\)进制的线性基弄个\(5\)进制的线性基。即令\(w_i\)为......
  • centos7下redis集群部署
    1、环境准备安装redis所需依赖环境#在线:yum-yinstallepel-releasegcc #离线:#下载yuminstall--downloadonly--downloaddir=/home/filesepel-releasegcc#将依赖包放到离线服务器,进入目录cd/home/files#执行安装rpm-Uvh./*.rpm--node......