C# Thread.Sleep(x) 或 while (DateTime.Now < dateStop)

C# Thread.Sleep(x) or while (DateTime.Now < dateStop)

我们有一个 Win Services 需要同时处理很多线程,每个线程完成后,需要挂起一段时间才能再次启动(挂起时间取决于数据库配置)。

一切都很好,但在某些奇怪的生产环境中,一些线程一直在休眠,没有发生任何类型的错误(本地日志和 Windows 事件)。 Thread的状态一直在"WaitSleepJoin"。返回的唯一方法是重新启动服务。

所以,我对我们的代码做了一些更改:

Thread.Sleep(waitTime);

收件人:

protected void WaitTime(int millesecs)
    {

        var dateStop = DateTime.Now.AddMilliseconds(millesecs);

        while (DateTime.Now < dateStop)
        {
            //Hang on
        }

    }

还有比这更好的方法吗??

使用事件并将超时设置为您的间隔。这样做的好处是可以通过设置事件来提供干净关闭线程的选项。

您不应该以第二种方式编写代码,因为线程将占用太多 CPU。你的问题应该不是睡眠引起的。