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

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

时间:2024-09-29 16:14:45浏览次数:5  
标签: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);
            }
        }

 

 

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

相关文章

  • Python 一键生成所有尺寸的应用Ico图标
    项目介绍在开发软件或网站时,我们经常需要为应用程序或网站设计专属的icon图标。我们将通过Python脚本一键生成iOS所有尺寸的应用图标,省时省力。编译环境Python版本:python3.8制作应用尺寸配置文件1.将所有尺寸的图片配置在iconContentsConfig.json文件中{"images":[......
  • 南沙C++信奥赛老师解一本通题1217:棋盘问题
    ​ 【题目描述】在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放 kk 个棋子的所有可行的摆放方案 CC。【输入】输入含有多组测试数据。每组数据......
  • FNCE30003 International Finance
    FNCE30003InternationalFinanceGroupAssignment2024Semester 2Details:1.Thisassignmentconstitutes 15%of yourfinal grade.2.Thisassignmentincludestwo files:●   thispdf assignmentinstructionfile,and●  theExcel filecontaining......
  • ESP32系列ESP32-D0WD双模 超低功耗集成BLE4.2+2.4G WIFI SoC芯片
    ESP32系列ESP32-D0WD双模超低功耗集成BLE4.2+2.4GWIFISoC芯片ESP32系列的ESP32-D0WD-V3芯片具有可扩展、自适应等特点。是2.4GHzWi-Fi+蓝牙双核芯片,具有卓越的射频性能,能在-40°C~105°C工作范围内,保持-97dBm接收灵敏度的领先性能。Wi-Fi输出功率在19.5dBm时,能符合SR......
  • Python 的 PIL库——Image.new() 的使用说明,制作icon图标
    Image包中的new()方法:新建一个图片对象,设置参数有:图片的模式,图片的尺寸,图片的颜色(不填写颜色的时候,其默认值为0,即黑色)返回:一个图片对象,即<class'PIL.Image.Image'>【语法格式:】Image.new(mode,size,color) 【参数说明:】mode:图片的模式。"1","CMYK","F",......
  • Modbus Tcp指令(一)
    1.读取一个或多个保持寄存器的数值如指令0002000000060103F20000060002事务标识符0000协议标识符0006长度标识符(从站号开始到指令结尾共有6个byte)01站号03功能码(读取一个或多个保持寄存器的数值)F200起始寄存器地址0006......
  • ChatGPT 订阅价或涨到 44 美元;研究称 AI 可 100% 绕过 reCAPTCHA V2 验证丨RTE 开发者
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观......
  • 深入解析网络通信的四大关键要素:网卡、MAC地址、IP地址、子网掩码与端口
    文章目录深入解析网络通信的四大关键要素:网卡、MAC地址、IP地址、子网掩码与端口**1.网卡(NetworkInterfaceCard,NIC)**关键知识点:联系与区别:**2.MAC地址(MediaAccessControlAddress)**关键知识点:联系与区别:**3.IP地址(InternetProtocolAddress)**关键知识......
  • C++ const_cast 和重载
    在4.11.3节(第145页)中我们说过,const_cast在重载函数的情景中最有用。举个例子,回忆6.3.2节(第201页)的shorterstring函数://比较两个string对象的长度,返回较短的那个引用conststring&shorterString(conststring&sl,conststring&s2){returnsl.size()<=s2.size()?......
  • CF2019D Speedbreaker
    题意Link一个数轴上有\(1,2,\dots,n\)共\(n\)个点。第\(1\)秒时,你将从其中一个点开始染色,称为初始点,之后第\(2,3,\dots,n\)秒,你每秒可以将一个被染色的点左边或右边的点染色。每个点有一个时间限制,必须要在\(a_i\)秒前(包含第\(a_i\)秒)被染色,问有多少个初始点可以将......