我正在使用的系统需要消耗IEnumerable的工作项,遍历每个工作项,并且在它们之间等待一定的时间。我想让枚举站点的系统尽可能简单。也就是说,我想有一个方法可以在foreach块的末尾调用,该方法将在我指定的特定时间段内阻塞-但我不想使用Thread.Sleep,因为无法保证精确。
我需要阻塞的最短时间是100毫秒,但是我不希望它阻塞的时间超过此时间,我已经看到Thread.Sleep有时会这样做(我假设是由于上下文所花费的时间)开关等)。
编辑:相关;对带有超时值的WaitHandle.Wait进行的调用与Thread.Sleep做相同的事情吗?
最佳答案
为什么您需要在迷人的时候等待呢?
如果IEnumerable集合在您浏览过程中发生更改,您将获得异常,因此,实际上,在您处理线程时,其他线程无法添加或删除任何项目。
既然如此,为什么人为地拖延呢?只需消耗它,然后让调度程序在线程之间分配工作即可。
如果您想要一个非常准确的等待时间,我建议您使用Thread.Sleep(time-20 ms),然后忙于等待正确的时间来完成您的工作。
只有实时操作系统才能为您提供这种精度。您可以假设Thread.Sleep的精度约为20毫秒,因此从理论上讲,您可以一直睡到所需的时间-实际时间约为20毫秒,然后旋转20毫秒,但您必须浪费那20毫秒。即使这样也不能保证您将获得实时结果,调度程序可能只是在线程即将执行RELEVANT部分时才取出线程(仅在旋转后)
关于.net - 在特定时间段内阻塞线程的精确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1322593/