当前位置: 首页 > article >正文

简述C#多线程

目录

一、Thread 类

1、核心功能

2、使用场景

3、示例代码

4、注意事项

二、ThreadPool 类

1、核心功能

2、使用场景

3、示例代码

4、注意事项

三、Task 类

1、核心功能

2、使用场景

3、示例代码

4、注意事项

四、Parallel 类

1、核心功能

2、使用场景

3、示例代码

4、注意事项

五、async 和 await

1、核心功能

2、使用场景

3、示例代码

4、注意事项

六、线程同步

1、核心功能

2、使用场景

3、示例代码

4、注意事项

七、总结


在C#中,多线程编程涉及多个类和机制,每个类都有其特定的用途和适用场景。以下是对每个类的详细解析,包括其核心功能、使用场景以及示例代码。

一、Thread 类

Thread 类是.NET中最基础的多线程实现方式。它允许你显式地创建和控制线程。

1、核心功能

  • 创建和管理线程。

  • 启动、暂停、恢复和终止线程。

  • 设置线程的优先级和状态。

2、使用场景

  • 需要显式控制线程的生命周期。

  • 执行长时间运行的任务。

  • 需要设置线程的优先级或状态。

3、示例代码

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        // 创建一个新线程
        Thread thread = new Thread(DoWork);
        thread.Start(); // 启动线程

        // 主线程继续执行
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Main thread: " + i);
            Thread.Sleep(500);
        }

        thread.Join(); // 等待线程结束
    }

    static void DoWork()
    {
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Worker thread: " + i);
            Thread.Sleep(500);
        }
    }
}

4、注意事项

  • 线程的创建和销毁开销较大。

  • 需要手动管理线程的生命周期。

  • 线程过多可能导致资源耗尽。

二、ThreadPool 类

ThreadPool 是一个线程池,它管理着一组后台线程,适用于执行短期的任务。

1、核心功能

  • 自动管理线程的创建和回收。

  • 适用于短期的、不需要显式控制的任务。

2、使用场景

  • 执行短期的、不需要长时间运行的任务。

  • 减少线程创建和销毁的开销。

3、示例代码

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        // 将任务加入线程池
        ThreadPool.QueueUserWorkItem(DoWork);

        // 主线程继续执行
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Main thread: " + i);
            Thread.Sleep(500);
        }
    }

    static void DoWork(object state)
    {
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Worker thread: " + i);
            Thread.Sleep(500);
        }
    }
}

4、注意事项

  • 无法控制线程池中的线程。

  • 不适合长时间运行的任务。


http://www.kler.cn/a/542504.html

相关文章:

  • 前端实现在PDF上添加标注(1)
  • 如何通过腾讯 ima.copilot 训练自己的知识库
  • 【EXCEL】【VBA】处理GI Log获得Surf格式的CONTOUR DATA
  • 2025 年 2 月 TIOBE 指数
  • AntDesign X 报错:Cannot read properties of undefined (reading ‘_context‘)
  • Linux下Gufw防火墙安装指南
  • Zookeeper 作注册中心 和nacos 和eruka 有什么差异 ?基于什么理论选择?
  • 第七节 文件与流
  • spring cloud 使用 webSocket
  • SpringCloud - Gateway 网关
  • 常用电路(过压保护、电流/电压采集)
  • 开源AI智能名片2+1链动模式S2B2C商城小程序在实体店与线上营销中的应用探索
  • 教程 | MySQL 基本指令指南(附MySQL软件包)
  • 最新PHP盲盒商城系统源码 晒图+免签+短信验证+在线回收 ThinkPHP框架
  • MySQL——CRUD
  • Java爬虫:高效获取1688商品详情的“数字猎人”
  • 林语堂 | 生活的智慧在于逐渐澄清滤除那些不重要的杂质,而保留最重要的部分
  • AH比价格策略源代码
  • HALCON 数据结构
  • Vision Transformer:打破CNN垄断,全局注意力机制重塑计算机视觉范式
  • 青少年编程与数学 02-009 Django 5 Web 编程 04课题、应用创建
  • 本地部署的drawio绘图存储调研
  • 数据结构--迷宫问题
  • 在nodejs中使用RabbitMQ(三)Routing、Topics、Headers
  • Flink-DataStream API
  • Redis Sentinel(哨兵)模式介绍