为Thread.Sleep(TimeSpan)设置高值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为Thread.Sleep(TimeSpan)设置高值相关的知识,希望对你有一定的参考价值。

我希望我的应用程序中的一个线程执行一个任务,并在那个睡眠后持续一段特定的时间。我使用Thread.Sleep()TimeSpan值作为参数。它工作正常。但是当我设置一个很大的值,例如25.20:30:40(25天20小时20分40秒)时,它会抛出一个ArgumentOutOfRangeException

http://msdn.microsoft.com/en-us/library/274eh01d(v=vs.110).aspx

例外情况

ArgumentOutOfRangeException timeout的值为负且不等于Timeout.Infinite(以毫秒为单位),或者大于Int32.MaxValue毫秒。

从配置文件中读取睡眠时间的值。在测试时,测试人员将此值设置为如上所述的高值。我感兴趣的是要知道在我提到的时间内让我的线程不做任何事情的更好方法是什么。 (即使它太高了。)

答案

文档告诉您最大时间跨度:

TimeSpan maxSleepSpan = TimeSpan.FromMilliseconds(int.MaxValue);

这是24.20:31:23.6470000。如果你需要睡得更久,那么你需要重新考虑你的设计。

另一答案

错误消息为您提供了这个答案 - Int32.MaxValue毫秒。 Int32.MaxValue是2147483647,其是24.20:31:23(24天20小时)。

如果您正在尝试等待这段时间,那么您不应该使用Thread.Sleep - 一开始这意味着您已经为每个活动作业绑定了一个线程。我建议调查Quartz.NET这样的调度库。这将允许您安排作业在特定时间或时间间隔运行。

另一答案

我错过了什么吗?你是在自问自答:

timeout的值为负,不等于Timeout.Infinite(以毫秒为单位),或者大于Int32.MaxValue毫秒。

TimeSpan值不能为负,无限或大于2147483647 ms(Int32.MaxValue)

另一答案

您可以设置的最大价值是2,147,483,647,因为MSDN已经说明了这一点

它不能大于Int32.MaxVaue

以上是关于为Thread.Sleep(TimeSpan)设置高值的主要内容,如果未能解决你的问题,请参考以下文章

从 Thread.Sleep() 制作 Task.Delay() [重复]

Java多线程和Thread.sleep [重复]

timeunit的sleep和thread的sleep有啥区别

WPF 小小案列(同步异步)

Thread.sleep 是如何真正工作的?

Android:Thread.sleep 没有结束