例如,如果我必须在这两者之间进行选择,我应该将Thread
专用于定期清理任务,还是应该使用永无止境的循环Task
?
因为Thread
在大多数时间都处于睡眠状态,所以我偶尔会唤醒信号(不一定在任何特定时间)进行一点清理工作该线程将被浪费。一个线程可能没什么大不了的,但我可能会拥有数十个线程。
我不想使用一个Thread
,它会永远循环,在每次迭代过程中(异步)等待一个“唤醒”信号,而不是创建通常休眠和消耗资源的专用Task
。 / p>
这不是一个“长期运行”的任务(即不会长时间受CPU约束),但它会是一个“长期存在的”任务(即它永远不会完成,通常只是在某些等待队列中进行跟踪)。
假设我开始了许多这些“长寿”任务。由于这些长期存在的任务仅存在,我是否会遇到这种方法的性能问题?使用Tasks管理工作并使其在ThreadPool线程上运行似乎更简单。与其他可能在ThreadPool线程上运行的工作相比,该工作不需要任何特殊的优先级。
答案 0 :(得分:3)
我都不用。
大多数时候都在睡觉,只是偶尔醒来一个信号以进行一点清理
这似乎是Timer
的完美用例。当时间流逝时,什么都不存在(线程或任务都不存在)。时间过去后,事件处理程序将运行ThreadPool线程。