我們使用的是基本上沒有這個的雙顯式鑄造用不同的結果爲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天。這不適合! - –