C#中Thread、Task、ThreadPool使用场景

1,Thread线程

  • 线程开销大,占用大量内存,创建和销毁会花费不少时间。
  • 使用场景:当程序中需要一个长时间运行的逻辑,比如while循环监听IO,大量数据计算等

2,ThreadPool线程池

  • 线程池没有返回值、无法探知执行的方法什么时候完成。
  • CLR(公共语言运行时)管理自己的线程池(ThreadPool)
  • CLR初始化时,线程池中没有线程;通过操作请求队列,派发给线程池中的线程执行;如果线程池没有线程,就新建一个线程。任务完成后,线程返回线程池,等待响应其他请求。
  • 当一个线程池内的线程空闲一段时间(CLR对该时间定义),该线程会自动销毁并释放资源。
  • 使用场景:ThreadPool.QueueUserWorkItem(),当程序中执行耗时的、不连续动作的、不需要返回值的逻辑,比如保存Excel、CSV、Wrold数据到本地等。

3,Task任务

  • 执行完成后有返回值,Task、Task<TResult~>;可中途取消任务
  • Task也基于线程池
  • 使用场景:并发、异步编程等

参考资料:CLR Via C#

posted @ 2022-09-14 18:05  新凉别处暑  阅读(317)  评论(0编辑  收藏  举报