我们使用的是基本上没有这个的双显式铸造用不同的结果为int
var t = TimeSpan.MaxValue;
int x = (int)t.TotalMilliseconds;
其中x最终会被传递给System.Threading.WaitHandle.WaitOne(INT)的API。
问题是,当这些代码在我们的开发和分期环境中运行,它不抛出任何错误,但是当它在生产中运行它抛出:
Exception: System.ArgumentOutOfRangeException
Message: Number must be either non-negative and less than or equal to Int32.MaxValue or -1.
Parameter name: millisecondsTimeout
当我测试这个用一个简单的控制台应用程序(x86和x64)x = -2147483648(int.MinValue)的结果,而当我在即时窗口中运行代码时,我得到x = 1566804069.
发生了什么事?
注:临时和生产都是从单个VM克隆所以有他们
之间没有差异THIS IS CODE,我们不能改变!否则我不会问这个问题。
你转换溢出,那为什么你得到两种不同的结果,类型转换为长或Int64的 –
@Tony没有,如果它是* *检查这将是一个溢出异常;所引用的例外表明*要么*表示持续时间正在包装,因为它未经检查*,或者间隔为负开始。 –
@Dustin,这不会工作;最大时间间隔是10,675,199天;以毫秒为单位的int.MaxValue是25天。这不适合! - –