可以使用不是长期运行的任务的长期任务吗?

时间:2019-10-19 19:21:12

标签: .net async-await task task-parallel-library threadpool

例如,如果我必须在这两者之间进行选择,我应该将Thread专用于定期清理任务,还是应该使用永无止境的循环Task

因为Thread在大多数时间都处于睡眠状态,所以我偶尔会唤醒信号(不一定在任何特定时间)进行一点清理工作该线程将被浪费。一个线程可能没什么大不了的,但我可能会拥有数十个线程。

我不想使用一个Thread,它会永远循环,在每次迭代过程中(异步)等待一个“唤醒”信号,而不是创建通常休眠和消耗资源的专用Task。 / p>

这不是一个“长期运行”的任务(即不会长时间受CPU约束),但它会是一个“长期存在的”任务(即它永远不会完成,通常只是在某些等待队列中进行跟踪)。

假设我开始了许多这些“长寿”任务。由于这些长期存在的任务仅存在,我是否会遇到这种方法的性能问题?使用Tasks管理工作并使其在ThreadPool线程上运行似乎更简单。与其他可能在ThreadPool线程上运行的工作相比,该工作不需要任何特殊的优先级。

1 个答案:

答案 0 :(得分:3)

我都不用。

  

大多数时候都在睡觉,只是偶尔醒来一个信号以进行一点清理

这似乎是Timer的完美用例。当时间流逝时,什么都不存在(线程或任务都不存在)。时间过去后,事件处理程序将运行ThreadPool线程。