我应该Thread.Sleep一个小时还是有更聪明的方法?

时间:2017-09-28 17:33:17

标签: c# multithreading

我必须在线程中每1小时更新一些数据。我把Method-checker放到一个新的Thread

if ((time_now - last_update) < 3600)
            Thread.Sleep(3600 * 1000);

但我觉得这不是正确的。也许有一种优雅而廉价的方法可以在C#中每小时检查一次更新而没有Thread.Sleep

3 个答案:

答案 0 :(得分:2)

如何在每个固定时间运行拉动方法:

var startTimeSpan = TimeSpan.Zero;
var periodTimeSpan = TimeSpan.FromHours(1);

var timer = new System.Threading.Timer((e) =>
{
    YourPullingMethod();
}, null, startTimeSpan, periodTimeSpan);

答案 1 :(得分:1)

睡觉不应该使用。这是不可靠的,不能取消;它也阻止了

您可以执行以下操作。

object waitTimeOut = new object();

lock (waitTimeOut) 
{ 
      Monitor.Wait(waitTimeOut, TimeSpan.FromMilliseconds(3600 * 1000)); 
} 

 TimeSpan ts = TimeSpan.FromMilliseconds(3600 * 1000);
 t.Wait(ts)

或者对于低频率你,其他评论对于使用cron作业是好的;并且会更适合你正在做的事情

答案 2 :(得分:-1)

查看System.Threading.Timer课程(或其他计时器,使用最适合您的课程)。