毫秒单位为C#-长还是整数?
我和Milisond一起工作,我用得很好毫秒单位为C#-长还是整数?,c#,timespan,C#,Timespan,我和Milisond一起工作,我用得很好 Timeout = (int)TimeSpan.FromMinutes(TimeoutVal).TotalMilliseconds 但是我读到很少有人将其转换为long,而不是int?为什么会这样?我之所以选择强制转换,唯一的原因是它使用的API只允许Int超时(例如Thread.Sleep或Task.Delay),但一般来说,你不应该这样做,除非a)你不介意它是否溢出并导致“意外”行为,或者b)它不应该溢出(比如,你使用的是一个小超时) 在所有其他目
Timeout = (int)TimeSpan.FromMinutes(TimeoutVal).TotalMilliseconds
但是我读到很少有人将其转换为
long
,而不是int
?为什么会这样?我之所以选择强制转换,唯一的原因是它使用的API只允许Int超时(例如Thread.Sleep或Task.Delay),但一般来说,你不应该这样做,除非a)你不介意它是否溢出并导致“意外”行为,或者b)它不应该溢出(比如,你使用的是一个小超时)
在所有其他目的中,不要铸造。改为双倍储存
要计算可存储在签名int32中的最大小时数(以毫秒为单位):
1s=1000ms
1m=60s
1h=60m
Int32最大值:2147483647
然后:
结果是596.5232小时
无论如何,您不应该使用具有如此高值的超时,而是使用取消令牌。但同样,这取决于您正在使用的API。
totalmillizes
是一个double
,为什么需要一个整数值?你的问题的答案肯定是因为int
不够大。你真的这么问吗?@DavidG如果我保持原样(强制转换为int),会发生什么?如果你保持原样,它将在超过600小时的任何时间内失败。如果你的持续时间都没有超过596小时,它就可以正常工作。但问题是:为什么要强制转换?如果双溢出值的大小为(int),那么结果将是一个不可用的int值,而不是一个异常。
int totalSeconds = int.MaxValue / 1000;
int totalMinutes = totalSeconds / 60;
int totalHours = totalMinutes / 60;