调用后检查溢出的正确方法是什么Interlocked.Increment
?
我有一个 ID 生成器,它在程序执行期间生成唯一 ID,目前我对其进行测试,增量返回零。
public static class IdGenerator {
private static int _counter = 0;
public static uint GetNewId() {
uint newId = (uint)System.Threading.Interlocked.Increment(ref _counter);
if (newId == 0) {
throw new System.Exception("Whoops, ran out of identifiers");
}
return newId;
}
}
鉴于我每次运行生成的 ID 数量相当多,_counter
增加时可能会溢出(在异常大的输入上),我想在这种情况下抛出异常(尽早崩溃以简化调试)。
摘自微软的文档:
此方法通过包装处理溢出条件: if
location
=Int32.MaxValue
,location + 1
=Int32.MinValue
。不会抛出异常。