我希望我的应用程序中的一个线程执行一个任务,并在那个睡眠后持续一段特定的时间。我使用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毫秒。
从配置文件中读取睡眠时间的值。在测试时,测试人员将此值设置为如上所述的高值。我感兴趣的是要知道在我提到的时间内让我的线程不做任何事情的更好方法是什么。 (即使它太高了。)
答案 0 :(得分:11)
文档告诉您最大时间跨度:
TimeSpan maxSleepSpan = TimeSpan.FromMilliseconds(int.MaxValue);
这是24.20:31:23.6470000
。如果你需要睡得更久,那么你需要重新考虑你的设计。
答案 1 :(得分:4)
错误消息为您提供了对此的答案 - Int32.MaxValue毫秒。 Int32.MaxValue是2147483647,即24.20:31:23(24天20小时)。
如果您正在尝试等待这段时间,那么您不应该使用Thread.Sleep - 一开始这意味着您已经为每个活动作业绑定了一个线程。我建议改为调查Quartz.NET等调度库。这将允许您安排作业在特定时间或时间间隔运行。
答案 2 :(得分:2)
我错过了什么吗?你回答了自己的问题:
超时值为负,不等于Timeout.Infinite 以毫秒为单位,或者大于Int32.MaxValue毫秒。
TimeSpan值不能为负,无限或大于2147483647 ms(Int32.MaxValue)
答案 3 :(得分:0)
您可以设置的最大值是2,147,483,647
,因为MSDN已经声明
不能大于Int32.MaxVaue