首页 > 解决方案 > C# 中的毫秒数 - long 还是 int?

问题描述

我正在使用 Milisecond 并且我已经使用它了

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

但是我读到很少有人将其投射到的地方long而不是int? 这是为什么?

标签: c#timespan

解决方案


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

在所有其他用途中,请勿施放。将其存储在 double 中。

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

1s = 1000ms

1m = 60s

1h = 60m

Int32 最大值:2147483647

然后:

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

结果将是 596.5232 小时。

无论如何,您不应该使用具有如此高值的超时,而是使用取消令牌。但同样,这取决于您正在使用的 API。


推荐阅读