代码改变世界

详细介绍:C#多线程全家桶:从Thread到async/await

2025-10-04 09:18  tlnshuju  阅读(7)  评论(0)    收藏  举报


C#多线程全家桶:从Thread到async/await

在这里插入图片描述

一、为什么需要用多线程

  • 单线程的局限:在单线程的程序中,所有的任务都只能按顺序依次执行。当执行耗时操作(如数据加载、文件读写)时,会阻塞主线程。会导致界面卡住、用户操作无响应,严重影响使用体验
  • 多线程的优势:能让脚本 “并行执行” 多个任务。在数据加载的同时响应用户点击,在计算数据的同时更新进度。利用合理分配 CPU 资源,大幅提升程序运行效率与用户体验,是高性能 C# 程序的核心技术之一

二、C#多线程软件盘点

Thread:多线程科技的基础

  1. Thread是C#多线程的“老祖宗”,直接操作OS线程,是所有多线程工具的基础。核心特性
  • 手动管理全生命周期:线程的启动、暂停、恢复和终止,全程自己说了算
  • 能调优先级:可设置线程优先级,但不一定 100% 生效(如不在同一个CPU运行的线程)
  • 默认是前台线程:主线程退出时,会等所有前台线程跑完才关闭程序(注意如果写了死循环,程序可能关不掉!),可手动设置是否为前台或后台线程
  1. 适用场景:需要精细调整线程优先级 或 任务数量极少的场景
  2. 避坑提醒:创建和销毁Thread的成本比较高(OS要给线程分配内存、管理上下文),不要频繁创建和消耗,会让程序变卡
  3. 可参考一文吃透 C# 中的 Thread:多线程编程的 “基础款”

ThreadPool:线程“共享池”,全自动管理

  1. ThreadPool 内部线程是 Thread 类的实例,最终由OS调度和管理。核心特性
  • 全自动管理:开发者无需手动 new Thread,线程池自动完成线程的创建、复用和销毁
  • “后台线程”就是都:主线程退出,池里的线程会被强制终止(不用担心程序关不掉)
  • 短板:不能调优先级,不适合长时间任务(占着线程池资源不撒手,其他任务就得排队)
  1. 适用场景:大量短小任务,如日志记录、简单数据校验、临时 IO 运行
  2. 注意Task