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 ответ

Решение

Используйте события и установите время ожидания в качестве вашего интервала. Это дает преимущество, заключающееся в том, что вы можете настроить чистое отключение потока, установив событие.

Вы не должны писать код вторым способом, поскольку поток будет занимать слишком много ЦП. Ваша проблема, вероятно, не вызвана сном.

Другие вопросы по тегам