请求日期时间时冻结自定义时间类

本文关键字:时间 自定义 冻结 日期 请求 | 更新日期: 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() 的静态函数而不是静态变量。