Насколько я понимаю, Thread.Sleep
вообще плох, потому что он принудительно удаляет все из памяти, даже когда в этом нет необходимости. В большинстве случаев это не будет иметь большого значения, но это может быть проблемой производительности.
У меня есть привычка использовать этот фрагмент вместо:
new System.Threading.EventWaitHandle(false, EventResetMode.ManualReset).WaitOne(1000);
Устанавливается в одну строку и не слишком сложен - он создает дескриптор события, который никогда не будет установлен, а затем ожидает полный период ожидания, прежде чем продолжить.
В любом случае, если вы просто пытаетесь повторять что-то каждые 5 минут, лучше использовать таймер. Вы могли бы даже сделать класс, чтобы аккуратно обернуть все, если ваши повторяющиеся методы работы уже учтены:
using System.Threading;
using System.Threading.Tasks;
public class WorkRepeater
{
Timer m_Timer;
WorkRepeater(Action workToRepeat, TimeSpan interval)
{
m_Timer = new System.Timers.Timer((double)Interval.Milliseconds);
m_Timer.Elapsed +=
new System.Timers.ElapsedEventHandler((o, ea) => WorkToRepeat());
}
public void Start()
{
m_Timer.Start();
}
public void Stop()
{
m_Timer.Stop();
}
}