-1

这是我的目标的概述:

我有一个 Windows 服务,它将在启动时检查该服务器上的特定数据库是否有任何可用队列。如果找到一个队列,它必须开始处理(非常简单直接)。如果没有找到队列,我需要服务“休眠”15 分钟,然后“重新启动”。如果找到队列,则开始处理,否则再休眠 15 分钟并“重新启动”。

我该怎么做呢?我查看了 System.Threading.Sleep 方法,但显然这是非常糟糕的编码。我确实明白,让线程休眠会阻止任何连续的方法被执行,这很好——因为在休眠之后,服务将调用相同的方法来“重新启动”处理。

我还查看了 System.Threading.Timer,但有时系统会完全停止服务。事件查看器中有一些与某种异常有关的错误,但是当我手动启动服务时,它会自动开始处理队列——表明我的编码没有问题。

什么是暂停Service线程15分钟,然后再次调用处理方法的最佳方法。它应该保持在不断检查可用队列的循环中。一旦找到,就进行处理,如果没有找到就休眠 15 分钟?

4

1 回答 1

0

如果你真的想睡觉,你只需调用Thread.Sleep. 用最基本的术语来说,您的线程的主执行循环如下所示:

while (true)
{
    if (!queue.processItem())
        Thread.Sleep(...);
}

您不应该调用Thread.Sleep主服务线程。在后台线程上调用它。所以这个想法是主服务线程保持活动状态并准备好处理任何服务消息。后台线程执行实际工作。

是的,睡觉通常是要避免的。理想情况下,您需要一个可以等待的阻塞队列,以防它为空。然后,当项目被添加到队列中时,您的线程将被唤醒。

于 2013-02-26T09:06:16.180 回答