C# 中的毫秒数 - long 还是 int?

Miliseconds in C# - long or int?

我正在使用 Milisecond,我用它就像

Timeout = (int)TimeSpan.FromMinutes(TimeoutVal).TotalMilliseconds

但我读到很少有人将其转换为 long 而不是 int?这是为什么?

我施法的唯一原因是它使用的 API 只允许 Int 超时(例如 Thread.Sleep 或 Task.Delay),但一般来说规则你不应该,除非 a) 你不介意它是否溢出并导致“意外”行为或 b) 如果它不应该溢出(比如,你正在使用一个小的超时)。

在所有其他用途中,请勿投射。改为将其存储在 double 中。

计算最大值。您可以存储在带符号的 int32 中的小时数(以毫秒为单位):

1s = 1000ms

1m = 60s

1h = 60m

Int32 max value: 2147483647

然后:

int totalSeconds = int.MaxValue / 1000;
int totalMinutes = totalSeconds / 60;
int totalHours = totalMinutes / 60;

结果为 596.5232 小时。

无论如何,您不应使用具有如此高值的超时,而应使用取消标记。但同样,这取决于您正在处理的API。