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。你的问题应该不是睡眠引起的。
我们有一个 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。你的问题应该不是睡眠引起的。