我们有一个需要同时处理大量线程的Win服务,每个线程在完成之后需要挂起一段时间再开始之前(挂起的时间是在数据库配置上)。
一切都很好但是在某些奇怪的生产环境中,一些线程已经睡了很久没有出现任何错误(本地日志和Windows事件)。 Thread的状态始终位于“WaitSleepJoin”中。回来的唯一方法是重新启动服务。
所以,我在代码中做了一些更改:
Thread.Sleep(waitTime);
要:
protected void WaitTime(int millesecs)
{
var dateStop = DateTime.Now.AddMilliseconds(millesecs);
while (DateTime.Now < dateStop)
{
//Hang on
}
}
有什么比这更好的方法吗?
答案 0 :(得分:2)
使用事件并将超时设置为您的间隔。这样做的好处是可以通过设置事件来提供干净关闭线程的选项。
你不应该以第二种方式编写代码,因为线程Wil需要占用太多CPU。你的问题可能不是由睡眠引起的。