C#多线程全家桶:从Thread到async/await
C#多线程全家桶:从Thread到async/await
- 一、为什么需要用多线程
- 二、C#多线程工具盘点
-
- Thread:多线程技术的基础
- ThreadPool:线程“共享池”,全自动管理
- BackgroundWorker:桌面应用助手
- Task:微软官方推荐,功能全面
- async/await:异步编程的“语法糖”
- Parallel.ForEach:集合处理的高效工具,多核CPU专属
- 三、一张表理清工具差异
- 四、工具间的内在联系
- 五、实战指南:这样选,准没错
- 官网文档
C#多线程全家桶:从Thread到async/await
一、为什么需要用多线程
- 单线程的局限:在单线程的程序中,所有的任务都只能按顺序依次执行。当执行耗时操作(如数据加载、文件读写)时,会阻塞主线程。会导致界面卡住、用户操作无响应,严重影响使用体验
- 多线程的优势:能让程序 “并行执行” 多个任务。在数据加载的同时响应用户点击,在计算数据的同时更新进度。通过合理分配 CPU 资源,大幅提升程序运行效率与用户体验,是高性能 C# 程序的核心技术之一
二、C#多线程工具盘点
Thread:多线程技术的基础
Thread
是C#多线程的“老祖宗”,直接操作OS线程,是所有多线程工具的基础。核心特性:
- 手动管理全生命周期:线程的启动、暂停、恢复和终止,全程自己说了算
- 能调优先级:可设置线程优先级,但不一定 100% 生效(如不在同一个CPU运行的线程)
- 默认是前台线程:主线程退出时,会等所有前台线程跑完才关闭程序(注意如果写了死循环,程序可能关不掉!),可手动设置是否为前台或后台线程
- 适用场景:需要精细调整线程优先级 或 任务数量极少的场景
- 避坑提醒:创建和销毁
Thread
的成本比较高(OS要给线程分配内存、管理上下文),不要频繁创建和消耗,会让程序变卡 - 可参考:一文吃透 C# 中的 Thread:多线程编程的 “基础款”
ThreadPool:线程“共享池”,全自动管理
ThreadPool
内部线程是Thread
类的实例,最终由OS调度和管理。核心特性:
- 全自动管理:开发者无需手动
new Thread
,线程池自动完成线程的创建、复用和销毁 - 都是 “后台线程”:主线程退出,池里的线程会被强制终止(不用担心程序关不掉)
- 短板:不能调优先级,不适合长时间任务(占着线程池资源不撒手,其他任务就得排队)
- 适用场景:大量短小任务,如日志记录、简单数据校验、临时 IO 操作
- 注意:
Task