C# 线程 线程池 Task的使用介绍
💡
原文中文,约1400字,阅读约需4分钟。
📝
内容提要
.NET Framework 4.5中的异步方法和线程池ThreadPool、线程Thread以及任务Task的使用。Task是对ThreadPool和Thread的包装,可以根据任务时间长短选择使用线程池还是新的线程,并增加了返回值、多个线程并行/串行等功能。Task的continuation可以更方便地写高scalability的代码。建议尽量使用Task,但要注意细节,如告诉Task是否是long-running、尽量避免Wait等。
🎯
关键要点
-
.NET Framework 4.5引入async/await修饰的异步方法,基于队列的线程任务。
-
Thread提供细粒度控制,但在返回值和并行/串行处理上功能不足。
-
ThreadPool提供粗粒度控制,适合短时间执行的代码片段,减少线程创建开销。
-
Task是对ThreadPool和Thread的封装,支持返回值和并行/串行功能,核心是调度器。
-
Task与Thread的区别在于阻塞处理,Task阻塞会影响整个任务,Thread则会切换到其他线程。
-
ThreadPool适合频繁、短期的小操作,调度算法自适应,不需手动调度。
-
Task的continuation功能支持高性能程序的编写,优化CPU上下文切换。
-
建议优先使用Task,注意细节如long-running标识、避免Wait和及时结束IO后的continuation。
🏷️
标签
➡️