如何暂停1毫秒的线程?

我需要简单的事情

while (true) { DoJob(); // wait 1 ms } 

我应该只使用Thread.Sleep(1)吗? 我不确定使用Timer因为看起来Timer本身的开销有点超过1 ms。

更新 :我需要这个延迟,以确保我收到来自网络的最新信息,这是交易软件。 我需要做一些事情,然后我必须等待1毫秒才能看到会发生什么。 我可以等待1.5毫秒,但不能等待3毫秒,那太多了。 可以很少等待5或10毫秒,但一般情况下它应该是~1毫秒

编辑 – 纠正“你将从睡眠中获得的最大分辨率到大约20毫秒,而不是100毫秒

即使你通过了Sleep(1),关于你将从睡眠中获得的最大分辨率是100毫秒。

对于它的价值,计时器可能更有效 – 特别是如果你有超过1个线程hibernate(System.Threading.Timer将使用尽可能少的线程,如果你分配多个计时器,他们将共享一个计时线程)(这来自Joe Duffy的并发编程书)

但更重要的是,你想做什么? 如果您正在进行投票 – 需要等待某些事情发生,您可以使用更有效的方法来进行投票。 如果您只需要经常启动任务,那么计时器可能是您最好的选择。

如果你只想停一毫秒,我可以问为什么? 您是否只是想确保您的线程产生其他进程?

可能有另一种方法可以做到这一点。 Windows有一个高分辨率计时器。 你可以在这里阅读: “如何:使用高分辨率计时器”

我认为这不像常规计时器 – 它不会触发事件,你只是用它来测量高精度的时间。 但是,您可以循环它,并在Millisecond通过时执行代码(您将一直消耗CPU)。 此外,我同意Henk的评论,即Windows不是实时操作系统 – 您永远不知道操作系统何时会暂停您的线程。