.net - 在特定时间段内阻塞线程的精确方法是什么?

标签 .net multithreading timing

我正在使用的系统需要消耗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/

相关文章:

c# - IsSerializable 为标记为 Serializable 的对象返回 "false"

Python 诅咒、线程 : Output thread reports a lagging value for global variable

java - 如何防止同步方法中的死锁?

javascript - 尝试使用标准 css3 实现 ease-in-out-expo 计时功能

javascript - javascript setInterval 和 setTimeout 'threads' 如何工作?

c# - 在 IIS 7 上使用 HttpHandler 取消请求验证

c# - 是否可以在子类中使用重叠列使用 TPH 继承?

ios - AudioOutputUnitStart() 和 RemoteIO 的渲染回调之间的时间差异

c# - 集合和列表

c - 此解决方案中的信号量使用是否正确?