请求日期时间时冻结自定义时间类
本文关键字:时间 自定义 冻结 日期 请求 | 更新日期: 2023-09-27 18:33:07
我正在使用一个简单的ASMX Web服务,该服务使用户能够添加注释。对于添加的每个注释,我都会在该行中添加一个时间戳。我遇到的问题是,如果我相隔 1 秒添加两条评论,它们都将具有相同的时间戳。我没有在代码中使用DateTime.Now
,而是使用静态类,因此我可以轻松编写单元测试。
这是我Time
课:
public class Time : IDisposable
{
public static DateTime Now;
static Time()
{
ResetToDefault();
}
public static IDisposable Freeze(DateTime dateTimeToFreeze)
{
Now = dateTimeToFreeze;
return new Time();
}
void IDisposable.Dispose()
{
ResetToDefault();
}
private static void ResetToDefault()
{
Now = DateTime.Now;
}
}
我猜这个类是罪魁祸首,因为如果我用DateTime.Now
替换所有Time.Now
实例,一切都按预期工作。
是什么原因导致我的Time
类在请求当前时间时冻结并且不总是刷新?
类中的公共 Now 变量仅在调用其中一个方法 Freeze 或 ResetToDefault 时更新。访问变量本身只会获得上次更新的值。相反,DateTime 的 Now 属性始终返回反映当前时间的值。
本质上,静态的东西是你的问题。 静态方法也会给多线程的东西带来真正的麻烦,因为静态变量(或具有静态构造函数的类)保留在内存中的方式。最好使用名为 Now() 的静态函数而不是静态变量。