C# Thread.Sleep(x) или while (DateTime.Now <dateStop)
У нас есть службы 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 ответ
Используйте события и установите время ожидания в качестве вашего интервала. Это дает преимущество, заключающееся в том, что вы можете настроить чистое отключение потока, установив событие.
Вы не должны писать код вторым способом, поскольку поток будет занимать слишком много ЦП. Ваша проблема, вероятно, не вызвана сном.