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

问题描述 投票:1回答:1

我应该将Thread专用于定期清理任务,还是应该使用永远无法完成的循环Task

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

而不是创建一个通常会处于睡眠状态并消耗资源的专用Thread,我想使用一个永久循环的Task,在每次迭代过程中(异步)等待“唤醒”信号。

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

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

.net async-await task task-parallel-library threadpool
1个回答
1
投票

我也不会使用。

大多数时候都在睡觉,只是偶尔醒来做一点清理工作的信号

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

© www.soinside.com 2019 - 2024. All rights reserved.