C# 我该睡几个小时还是有更聪明的方法?
我必须在一个线程中每1小时更新一些数据。我将方法检查器放入一个新线程C# 我该睡几个小时还是有更聪明的方法?,c#,multithreading,C#,Multithreading,我必须在一个线程中每1小时更新一些数据。我将方法检查器放入一个新线程 if ((time_now - last_update) < 3600) Thread.Sleep(3600 * 1000); if((现在时间-上次更新)
if ((time_now - last_update) < 3600)
Thread.Sleep(3600 * 1000);
if((现在时间-上次更新)<3600)
线程睡眠(3600*1000);
但我觉得这是不对的。也许有一种优雅而廉价的方法可以在不使用
线程的情况下每小时检查一次更新。在C#?中使用Sleep
查看类(或其他计时器,使用最适合您的计时器)。在固定时间运行拉取方法如何:
var startTimeSpan = TimeSpan.Zero;
var periodTimeSpan = TimeSpan.FromHours(1);
var timer = new System.Threading.Timer((e) =>
{
YourPullingMethod();
}, null, startTimeSpan, periodTimeSpan);
睡眠不应该被使用。不可靠,不能取消;它也在阻塞 您可以执行以下操作
object waitTimeOut = new object();
lock (waitTimeOut)
{
Monitor.Wait(waitTimeOut, TimeSpan.FromMilliseconds(3600 * 1000));
}
或
或者,对于使用cron作业的频率较低的情况,其他评论都很好;而且更适合您正在做的事情我觉得这应该由您的操作系统中的某些东西来安排——查看cron作业。看起来你不想让程序运行一个小时。另外,如果程序关闭,作业将停止。是的,请使用Windows任务计划进行此操作。不要让一根线睡上几个小时。这是浪费。另外,总是可以使用异步调用,也可以使用计时器,但我认为最好使用OSUse timer来安排它,如果它的c#是根据时间的流逝来触发事件,考虑一下你在现实生活中会做什么。线程是工人。如果你每小时都有工作要做,你会雇一个工人,让他们在不工作的时候睡觉吗?或者你会给一个现有的工人一个闹钟,然后说“当闹钟响的时候,做这个工作”?
TimeSpan ts = TimeSpan.FromMilliseconds(3600 * 1000);
t.Wait(ts)