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。

➡️

继续阅读