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#