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

时间:2017-05-13 12:52:07

标签: c# multithreading thread-sleep

我们有一个需要同时处理大量线程的Win服务,每个线程在完成之后需要挂起一段时间再开始之前(挂起的时间是在数据库配置上)。

一切都很好但是在某些奇怪的生产环境中,一些线程已经睡了很久没有出现任何错误(本地日志和Windows事件)。 Thread的状态始终位于“WaitSleepJoin”中。回来的唯一方法是重新启动服务。

所以,我在代码中做了一些更改:

Thread.Sleep(waitTime);

要:

protected void WaitTime(int millesecs)
    {

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

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

    }

有什么比这更好的方法吗?

1 个答案:

答案 0 :(得分:2)

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

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